为什么要实现异步WCF服务操作

时间:2015-10-06 04:07:20

标签: c# wcf

我找到了解释如何实现异步WCF服务操作的文档:

https://msdn.microsoft.com/en-us/library/ms731177(v=vs.110).aspx

这让我想知道为什么(或何时)我想让我的服务操作异步,当客户端可以自己生成操作的异步版本时。当客户端生成操作的异步版本时,它是否与服务本身已实现异步操作相同?

此外,在文档中的示例代码中,end方法没有OperationContractAttribute。为什么呢?

1 个答案:

答案 0 :(得分:4)

我认为您的问题的答案就在您提供的链接之后。 在这里(https://msdn.microsoft.com/en-us/library/ms734701%28v=vs.110%29.aspx)你可以看到:

  

如果操作服务实现进行阻塞调用(例如执行I / O工作),则在服务操作实现中使用异步方法。在异步操作实现中,尝试调用异步操作和方法以尽可能扩展异步调用路径。例如,从BeginOperationOne()中调用BeginOperationTwo()。

因此,当您的服务使用其他服务(例如Redis)或下载任何内容时,这对于以异步方式实现这些操作并且不阻止服务器的工作线程非常有意义。工作线程的数量是有限的,在某些时候你的服务器会卡住,因为所有线程都在服务。在异步实现的情况下,您可以利用我们的I / O完成端口和来自单独线程池的相应I / O线程。 I/O completion ports是Windows中非常有效的机制,有助于避免资源浪费。