WCF绑定与服务托管全解析
绑定相关
流式传输
SvcUtil在为绑定生成客户端配置时会遵循策略扩展并启用流式传输。例如在示例中,策略断言<msf:Streamed>就与流式传输相关。当创建通过TCP或命名管道协议进行流式传输的CustomBinding时,相同的策略扩展会生成在生成的WSDL描述中。
在流式传输过程中,服务和客户端各自负责自己的流。以下是服务向客户端流式传输时各参与方的职责:
1. 服务操作负责创建Stream对象,例如将FileStream初始化为特定文件,然后将该流返回给服务模型。
2. 服务模型持有流的引用。如果绑定启用了流式传输,它会等待客户端读取流,而不是缓冲文件来创建消息。
3. 在客户端,服务模型为客户端构造一个流引用以读取远程流。此后,关闭客户端代理没有影响,因为客户端将直接从服务器流中拉取数据,由服务模型协助。
4. 客户端完成最后一次读取后,服务端的服务模型将关闭其流,即服务模型负责关闭服务器端的流。
5. 客户端负责关闭其自身的流引用,这可能导致关闭服务端的流。
当客户端向服务发送流时,角色相反,即当服务器完成最后一次读取时,客户端侧的服务模型关闭流。
以下是流式传输的WS - Policy扩展示例:
<wsp:Policy wsu:Id="NetTcpBinding_MediaStreamingContract_policy"> <wsp