我正在使用WCF进行流处理,并对MSDN中关于WCF中大数据和流处理的文章中“启用异步流处理”段落有疑问。
为了启用异步流处理,需要向服务主机添加
我理解上述内容的意思是要添加
为了启用异步流处理,需要向服务主机添加
DispatcherSynchronizationBehavior
终结点行为,并将其AsynchronousSendEnabled
属性设置为true
。我们还在发送端添加了真正的异步流式处理功能。这提高了服务的可伸缩性,在向多个客户端流式传输消息的情况下特别有效,其中一些客户端由于网络拥塞或根本没有读取而读取速度较慢。在这些场景中,我们现在不会阻止服务每个客户端上的单个线程。这确保了服务能够处理更多的客户端,从而提高了服务的可伸缩性。我理解上述内容的意思是要添加
DispatcherSynchronizationBehavior
终结点行为,并将其AsynchronousSendEnabled
属性设置为true
<behaviors>
<endpointBehaviors>
<behavior name="AsyncStreaming">
<dispatcherSynchronization asynchronousSendEnabled="true" />
</behavior>
</endpointBehaviors>
...
我需要修改web.config
文件并在我的端点中引用 AsyncStreaming
行为,但我不明白这些步骤对我有什么作用。我是否需要修改我的代码才能利用这种异步性?
另外,关于类似的话题(如果太不同,我会将其移动到一个新问题),使用异步/等待如何影响在WCF中使用流?我可以在我的服务契约中使用 Task<Stream> Foo()
吗?我进行一些数据库调用,最终将结果包装到自定义流中,然后从WCF服务返回。能够使用像 ExecuteDataReaderAsync()
这样的东西非常有用,当处理流而不是缓冲消息时,我还能使用它吗?