【问题标题】:WCF Web Service with Asynchronous task具有异步任务的 WCF Web 服务
【发布时间】:2015-01-08 11:14:40
【问题描述】:

我有一个 WCF Web 服务,它必须像这样运行:

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

客户端必须只在第 2 步收到响应,然后什么都没有。我认为这不是真正的异步 Web 服务,而是具有异步线程的同步 Web 服务。

我使用 .NET 4.0。

我可以使用什么技术?

【问题讨论】:

  • 我正在尝试使用基于任务的方法,但我不确定我是否可以在步骤 3 完成之前在步骤 2 中发送响应

标签: c# .net multithreading wcf asynchronous


【解决方案1】:

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

为此,正确的架构是有一个单独的“后端”系统进行处理(例如,Azure WebJob 或 Win32 服务),并在 WCF 服务和后端服务之间放置一个可靠的队列(例如、Azure 队列或 MSMQ)。当 WCF 应用程序接收到请求时,它会验证参数,在队列中弹出一条消息,然后返回。后端服务独立地从队列中读取请求并处理它们。

我有a blog post 更详细地介绍了一些其他替代方法。

【讨论】:

    【解决方案2】:

    如果你想在你的服务中使用 async/await,你需要这里描述的异步泵:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-11-14
      • 2014-09-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-16
      • 1970-01-01
      相关资源
      最近更新 更多