我可以在WCF中使用datacontracts进行流式传输而不是消息合同。
如果是,它会提供任何性能改进吗?
感谢
答案 0 :(得分:6)
答案取决于您使用的绑定。对于TCP或命名管道传输协议,您可以流式传输任何数据 - 包括数据协定。如果你想通过HTTP使用流媒体(由BasicHttpBinding支持),你必须要有几个约束:
只有通过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
{ ... }
如果您不遵守这些限制,最终会遇到两种情况: