.NET 网络服务 - 快速确认,但在后台继续处理

标签 .net asynchronous web-services queue

我正在构建一个将由供应商的应用程序使用的 .NET Web 服务,但我不确定如何完成以下操作:

  • 供应商会调用我的 webserivce 提供一些信息,但希望快速返回确认,只是说明我收到了他们的信息。他们不在乎我用它做什么,也不想承认我已经完成了处理。
  • 传递给我的信息需要在幕后做一些事情,并以对时间敏感的方式对信息采取行动——即在几分钟内采取一些行动。我将联系许多其他 Web 服务,以及做一些数据库工作。显然,这将是在我对调用应用程序响应“成功”之后。

  • 我无法控制供应商访问我的服务的方式,而且他们用来调用它的方法是同步的,因此我需要快速响应,让调用应用程序继续工作。在我看来,有两种选择,但我对其他人持开放态度:
  • 由于调用应用程序本质上是提交到队列,以便我编写的进程可以处理它,因此我可以让 Web 服务将项目提交到数据库(或 MSMQ 或其他队列),然后返回成功。队列进程将从那里接收处理。
  • 理想情况下,我想象我的服务可以返回“成功”,然后继续自行处理,但我不确定这是否可行。由于我的处理对时间敏感,启动新请求的后端处理是理想的,因此等待时间最短。

  • 有没有其他想法,或者其中一个听起来更可取?

    最佳答案

  • 接收请求
  • 使用传入的参数
  • 分离后台进程(例如使用 BackgroundWorker)
  • 返回确认 - 带有 Guid 或请求的类似标识符
  • 做你的处理...
  • 同时,调用者可以根据标识符
  • ping 您的服务以获取状态更新。
  • 在处理过程中,返回“仍在工作”的响应,或者,如果您很聪明或可以准确预测它,则返回进度度量(可能是完成的百分比或剩余的时间)
  • 处理完成后,向状态请求返回“成功”消息
  • 通过您之前回复的标识符提供解决方案
  • 关于.NET 网络服务 - 快速确认,但在后台继续处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2356899/

    相关文章:

    .net - WinDbg 地址汇总

    c - 异步运行 lua_pcall

    c# - 将嵌套循环重构为单个 LINQ 查询

    .net - 是否有更喜欢约定而不是配置的 .NET IoC?

    .net - 有条件地删除powershell中的DataTable行?

    c# - 从 F# 调用 C# 异步方法会导致死锁

    Java - 将等待/通知转换为 java.util.concurrent

    java - 使用 KSoap 从 Android 调用 webservice 只需返回 "error"字符串

    web-services - future 方法销售人员的测试覆盖率

    ios - 构建 iOS 网络应用程序(REST 客户端)的最佳架构方法