WCF服务 - 异步实现

时间:2014-09-15 15:20:55

标签: performance wcf asynchronous scalability async-await

在独立的Windows应用程序(Wpf / Winforms)中,我可以看到使用长时间运行方法的异步实现来保持UI响应的好处。

据我所知,IIS将负责处理线程,例如Web服务在处理另一个请求时不会阻塞。

所以我的问题是:

  1. 当使用async / await实现Web服务时,是否会产生这种情况?
  2. 我们是否可以获得任何性能/扩展优势,例如使用async / await关键字实现异步。
  3. 要使wcf服务扩展并且运行良好,可以在配置文件中进行唯一的调整,还是还有其他需要考虑的事项?
  4. 我有兴趣听取您的经历,而不仅仅是理论文章的链接。

    由于

1 个答案:

答案 0 :(得分:3)

一般来说,通过async / await ,如果他们使用自然异步操作,Web服务就可以获益。这是因为async可以在等待操作完成时将IIS线程返回到线程池,而不是阻塞该线程。

我没有在WCF服务上听过很多数字,但在MVC / WebAPI方面,我听说过10x-100x范围内的可扩展性优势。

“自然异步”通常表示“基于I / O”。显然,如果只使用Task.Run将CPU绑定(或阻塞)调用卸载到线程池线程上,则没有任何好处 - 您只需将一个线程交换给另一个线程。但是如果您的实现是I / O绑定的,那么您可以使用async来最大限度地使用线程池。

要记住的另一件事是整个系统的可扩展性。即,如果您的WCF调用只是转而调用单个SQL Server后端,那么您可能无法从扩展WCF中获得任何好处,因为SQL Server将成为您的可伸缩性瓶颈。

但总的来说,我建议在服务器端代码上使用async / await进行任何自然异步工作。