具有异步任务的 WCF Web 服务

WCF Web Service with Asynchronous task

我有一个 WCF 网络服务,它必须像这样:

  1. 外部调用
  2. 它returns 对输入数据进行基本验证后对客户端的响应
  3. 它启动一个异步任务,不能通知客户端。

客户端必须只在步骤2中收到响应,然后再没有别的。我认为这不是一个真正的异步网络服务,而是一个带有异步线程的同步网络服务。

我使用 .NET 4.0。

我可以使用什么技术?

如果您想在您的服务中使用 async/await,您将需要此处描述的异步泵:

Await, SynchronizationContext, and Console Apps: Part 3 by Stephen Toub

你不应该那样做。例如,如果您的 WCF 服务托管在 ASP.NET 中,那么 ASP.NET 将在没有未完成的请求时假定它 什么都不做 。因此,您的服务可以在您仍在工作时回收。

正确的架构是有一个单独的 "backend" 处理系统(例如,Azure WebJob 或 Win32 服务),并在 WCF 服务和后端服务(例如,Azure 队列或 MSMQ)。当 WCF 应用程序收到请求时,它会验证参数,在队列中弹出一条消息,然后 returns。后端服务独立从队列中读取请求并处理。

我有 a blog post 更详细,并描述了一些其他替代方法。