【发布时间】:2010-08-26 10:50:09
【问题描述】:
请问我可以在 WCF 中使用数据合同而不是消息合同来进行流式传输吗?
如果是,它会提供任何性能改进吗?
谢谢
【问题讨论】:
-
你能发布例子吗?您将使用哪种绑定?
-
我不确定,因为我对 WCF 很陌生。能否请您提供一些链接,以帮助我开始使用 WCF 进行流式传输。
标签: wcf performance datacontract
请问我可以在 WCF 中使用数据合同而不是消息合同来进行流式传输吗?
如果是,它会提供任何性能改进吗?
谢谢
【问题讨论】:
标签: wcf performance datacontract
答案取决于您使用的绑定。对于 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
{ ... }
如果你不遵守这些限制,你最终会遇到两种情况:
【讨论】: