[英]In Wcf how to use message class for streamed transfer?
在.NET WCF中,我想使用TransferMode.Streamed。 因此,我需要一個Message對象來傳遞多個參數。 為了避免傳遞任何參數組合的大量消息類,我嘗試使用模板類。 兩個參數的示例:
[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;
}
不使用消息模板就不會發生這種情況。 有什么建議么?
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;
}
根據弗洛里安人的回答,可能會發生以下情況,例如對於兩個值和一個流值:
[MessageContract]
public class StreamMessage<T1,T2>
{
[MessageHeader(MustUnderstand = true)]
public T1 Val1;
[MessageHeader(MustUnderstand = true)]
public T2 Val2;
[MessageBodyMember(Order = 1)]
public Stream Stream;
}
對於Stream類型,WCF將其限制為僅在體內的一個對象。 因此,我決定必須使用兩個模板:Message和StreamMessage。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.