2010-08-26 36 views
1

请问我可以使用WCF中的数据合同进行流式传输而不是消息合同。我可以使用WCF中的数据合同进行流式传输

如果是的话,它会提供任何性能改进?

THanks

+0

你可以发布示例吗?你打算使用哪种绑定? – 2010-08-26 10:58:20

+0

以及我不确定,因为我很新的WCF。你能否给我提供一些链接,可以帮助我开始使用WCF进行流式传输。 – Amit 2010-08-26 11:14:26

回答

5

答案取决于您使用的绑定。对于TCP或命名管道传输协议,您可以传输任何数据 - 包括数据合同。如果你想使用流通过HTTP(通过basicHttpBinding的支持),你需要某几个限制:

  • 流必须被允许在结合
  • 操作具有仅包含单流实例或消息合同工作Stream类型的body元素。数据合同只能作为消息合同上的自定义消息标题。

流媒体通过HTTP只有有效的操作定义是:

// StreamedResponse 
[OperationContract] 
Stream GetData(int id); 

// StreamedRequest 
[OperationContract] 
int PostData(Stream data); 

// Streamed 
[OperationContract] 
Stream WorkWithData(Stream data); 

[OperationContract] 
DoSomethingResponse DoSomething(DoSomethingReqest request); 

[MessageContract] 
public class DoSomethingRequest 
{ 
    // Custom data and data contract allowed only as SOAP headers which are always buffered 
    [MessageHeader] 
    public MyDataContract CustomHeader { get; set; } 

    // No other member allowed 
    [MessageBodyMember] 
    public Stream Data { get; set; } 
} 

[MessageContract] 
public class DoSomethingResponse 
{ ... } 

如果不遵守这些限制,你将最终获得两种情况:

  • 操作甚至没有流如果您为流式配置绑定 - 如果您不使用Stream实例作为消息内容,则会发生这种情况
  • 异常 - 如果您使用Stream实例+其他数据/数据合同作为消息内容
+0

这里意味着什么。只是发回说雇员数据被认为是流? – Mou 2016-12-25 17:44:49