2

我正在编写 Web 服务 A 并调用 Web 服务 B。

一旦我验证了 AI 的输入,我想返回一个成功代码,然后调用 B。

我正在考虑的方法:

  • 看看我是否可以生成一个在 A 返回后完成的工作线程。
  • 编写代理或服务来调用 B 并使用可靠的队列来传输经过验证的参数。

运行时上下文是由 ASP.NET Web 应用托管的 Service.svc。

我该怎么做?

更新:我只想说答案都很有用。我决定标记我使用的那个。

4

4 回答 4

2

Code Project 上的此链接应为您提供使用 Windows Communication Foundation 创建稳定的异步通信所需的所有信息。

一本对这种交流形式进行了大量处理的书:

  • WCF 一步一步
  • 多层框架中的 WCF

希望这会有所帮助。我会给你一些例子,但是关于 Code Project 的教程应该提供你所需要的。

于 2013-03-06T00:08:53.610 回答
2

一旦我验证了 AI 的输入,我想返回一个成功代码,然后调用 B。

在这种情况下,您应该将工作放入持久队列(MSMQ、Azure Bus 等),然后才返回成功代码。另一个系统(不在 ASP.NET 中托管;即 Azure 辅助角色、Win32 服务等)应该从队列中检索工作并调用 B。

这是唯一可靠的方法。Phil Haack 有一篇很好的博客文章说明了为什么在 ASP.NET 中同时执行这两个部分是一个坏主意;它归结为回收利用。有关回收触发器的更多信息,请点击此处此处

于 2013-03-06T05:00:50.273 回答
1

你的第二个想法很好。将异步部分发送到 Windows 服务。如果您需要可靠性,请使用消息队列来实现。在任何情况下,您都可以使用 WCF 将请求发送到其他服务。

于 2013-03-06T00:59:38.417 回答
1

这个问题并不真正特定于任何特定的服务接口。通常,您的决定取决于您为什么要异步调用某些东西:

  1. 如果您只想让客户端对单个长时间运行的方法调用做出快速响应,请调用您的异步方法并立即返回一个令牌(任务 ID 等),该令牌可用于稍后检查任务的进度。
  2. 如果您有几个长时间运行的方法要执行,并且您主要想异步调用以通过并行性提高效率,请在一开始就调用任何可以调用的方法,然后继续执行不依赖于先前方法的所有其他方法。等待完成返回结果或启动后续任务所需的任何任务。
  3. 在大多数情况下,我会让客户端在带有状态令牌的同步和异步方法之间进行选择;如果他们想继续,他们可以稍后再回来查看,如果在继续之前获得该结果很重要,那么这也是一个选择。

随着每个后续框架版本> 3.5,这些方法变得更加容易,我相信其他答案已经让您深入了解如何在 c# 中启动、继续和/或等待异步任务结果的细节。

于 2013-03-06T01:20:57.690 回答