gpt4 book ai didi

wcf - 我可以在 WCF 中使用数据契约(Contract)进行流式传输吗

转载 作者:行者123 更新时间:2023-12-01 11:07:48 24 4
gpt4 key购买 nike

我可以在 WCF 中使用数据契约(Contract)代替消息契约(Contract)进行流式传输吗?

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

谢谢

最佳答案

答案取决于您使用的绑定(bind)。对于 TCP 或命名管道传输协议(protocol),您可以流式传输任何数据 - 包括数据契约(Contract)。如果您想通过 HTTP 使用流式传输(由 BasicHttpBinding 支持),您必须遵守一些限制条件:

  • 绑定(bind)时必须允许流式传输
  • 操作必须与 Stream 实例或仅包含 Stream 类型的单个主体元素的 Message 契约(Contract)一起使用。数据协定只能作为消息协定上的自定义消息 header 。

只有通过 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
{ ... }

如果您不遵守这些限制,您最终会遇到两种情况:

  • 即使您为流式传输配置绑定(bind),操作也不会流式传输 - 如果您不使用 Stream 实例作为消息内容,就会发生这种情况
  • 异常 - 如果您使用 Stream 实例 + 其他数据/数据协定作为消息内容,则会发生这种情况

关于wcf - 我可以在 WCF 中使用数据契约(Contract)进行流式传输吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3574356/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com