2014-02-12 80 views
0

在.NET WCF中,我想使用TransferMode.Streamed。因此我需要有一個Message對象來傳遞多個參數。爲了避免大量的消息類的任何參數組合傳輸,我嘗試了一個模板類。例如,對於兩個參數:在Wcf中如何使用消息類進行流式傳輸?

[MessageContract] 
public class StreamMessage<TA,TB> 
{ 
    [MessageHeader(MustUnderstand = true)] 
    public TA Value1; 

    [MessageBodyMember(Order = 1)] 
    public TB Value2; 
} 

如果我使用模板類傳輸一個FileStream對象,客戶端接收始終關閉該流。 服務器:

public StreamMessage<String,FileStream> DownloadFromServer() 
{ 
    Console.WriteLine("DownloadFromServer()"); 
    const string filename = @"c:\The\File\Name"; 
    var result = new StreamMessage<String,FileStream>(); 
    result.Value1 = filename; 
    result.Value2 = File.OpenRead(filename); 
    return result; 
} 

這不無消息模板的使用發生。有什麼建議麼?

回答

0

FileSteam無法序列化。嘗試使用Steam類:

public StreamMessage<String, Stream> DownloadFromServer() 
{ 
    Console.WriteLine("DownloadFromServer()"); 
    const string filename = @"c:\The\File\Name"; 
    var result = new StreamMessage<String, Stream>(); 
    result.Value1 = filename; 
    result.Value2 = File.OpenRead(filename); 
    return result; 
} 
0

根據Florians的回答,可能有以下情況,例如:爲兩個值和一個流值:

[MessageContract] 
public class StreamMessage<T1,T2> 
{ 
    [MessageHeader(MustUnderstand = true)] 
    public T1 Val1; 

    [MessageHeader(MustUnderstand = true)] 
    public T2 Val2; 

    [MessageBodyMember(Order = 1)] 
    public Stream Stream; 
} 

在類型流的情況下,WCF限制這對在身體只有一個對象。所以我決定兩個模板:消息和StreamMessage。