【问题标题】:How to create an async WCF service如何创建异步 WCF 服务
【发布时间】:2011-09-21 00:00:47
【问题描述】:

我想实现一个立即响应调用者的 WCF 服务,但将异步作业排队等待稍后处理。这样做的最佳方法是什么?我已阅读 how to implement an asynchronous service operation 上的 MSDN 文章,但该解决方案似乎仍需要在响应调用者之前完成任务。

【问题讨论】:

  • 如果它是一个提交并忘记操作,启动一个线程或委托可能是您想要做的,并在 Web 服务请求立即完成时运行该操作。但问题是:您是否需要在流程完成时通知客户?那是事情变得棘手的时候,因为这需要服务订阅或交替的客户端轮询来检查工作状态。以下可能会有所帮助:stackoverflow.com/questions/1537302/…
  • @RickStrahl 我确实需要在流程完成时通知客户。但是,他们有自己的一组 WCF 服务,我可以将这些结果发布到。听起来使用委托是解决此问题的最简单方法。

标签: wcf asynchronous


【解决方案1】:

有很多方法可以实现这一点,具体取决于您想要做什么以及使用什么技术(例如,除非您使用 silverlight,否则您可能不需要让您的应用异步调用服务)最直接的实现方式您的目标是让您的服务方法启动一个线程来执行大部分处理并立即返回。

另一种方法是创建某种请求(例如,在某种数据存储中创建一个条目)并返回。然后另一个进程(例如 Windows 服务等)可以接收请求并执行处理。

【讨论】:

  • 所以你建议我做一些事情,比如创建一个委托来处理所有繁重的工作并在发回初始响应之前调用 BeginInvoke?
  • 是的。线程的职责之一是在完成处理作业时通知其结束。
  • 您可能需要考虑使用this post中所示的线程池
【解决方案2】:

任何 WCF 服务都可以异步 -

WCF 的优点之一是您可以同步编写服务。在客户端中添加 ServiceReference 时,您可以选择生成异步方法。

这将自动使服务调用异步。服务完成后会返回,但客户端会获得两个方法 - BeginXXX 和 EndXXX,以及 XXXAsync + 一个 XXXCompleted 事件,这两个方法都允许完全异步操作。

【讨论】:

  • 这里的问题是我不控制客户端代码。客户端实际上创建了我的 WCF 服务必须遵守的接口,据我所知,他们只是想向我的 WCF 服务发送一条消息并让它立即响应。然后,当我的服务器成功处理了初始请求时,他们希望它向他们发送一个单独的请求。本质上,他们希望我的 WCF 服务异步工作,而不是更改他们的客户端代码以异步调用我的服务。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-03
相关资源
最近更新 更多