簡體   English   中英

在Wcf中如何使用消息類進行流傳輸?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM