WCF - 在流端点中,是否所有操作契约都需要一个流作为合同的返回或参数?

时间:2010-04-07 05:15:15

标签: wcf

我想知道在同一端点(已设置为流传输模式)是否需要让此服务中的所有操作契约在参数中有一个流,或者作为此服务的返回类型?< / p>

简而言之:流式启用端点是否包含没有流作为参数或返回类型的操作合同?

2 个答案:

答案 0 :(得分:2)

是的,即使您使用流端点,也可以保持相同的合同,如果它包含流作为返回类型或参数,则无关紧要。

要使其工作,您需要将合同的某些成员更改为标题。

[MessageContract]
public class MyContract
{
    [MessageHeader]
    public string FileName { get; set; }

    [MessageBodyMember]
    public Stream Content { get; set; }
}

答案 1 :(得分:2)

检查Streaming Message Transfer上的MSDN文档:

  

对流转移的限制

     

使用流式传输模式   导致运行时间强制执行   其他限制。

     

跨越的操作   流式运输可以签订合同   最多只有一个输入或输出   参数。该参数对应   对整个信息和   必须是Message,派生类型   流,或IXmlSerializable   实施。有一个返回值   对于一个操作相当于   有一个输出参数。

因此,如果您的服务合同将通过启用了流媒体的端点公开,则该合约上的所有操作必须使用MessageStream作为他们的单个参数。