我正在构建一个将由供应商的应用程序使用的 .NET Web 服务,但我不确定如何完成以下操作:
供应商会调用我的 webserivce 提供一些信息,但希望快速返回确认,只是说明我收到了他们的信息。他们不在乎我用它做什么,也不想承认我已经完成了处理。 传递给我的信息需要在幕后做一些事情,并以对时间敏感的方式对信息采取行动——即在几分钟内采取一些行动。我将联系许多其他 Web 服务,以及做一些数据库工作。显然,这将是在我对调用应用程序响应“成功”之后。 我无法控制供应商访问我的服务的方式,而且他们用来调用它的方法是同步的,因此我需要快速响应,让调用应用程序继续工作。在我看来,有两种选择,但我对其他人持开放态度:
由于调用应用程序本质上是提交到队列,以便我编写的进程可以处理它,因此我可以让 Web 服务将项目提交到数据库(或 MSMQ 或其他队列),然后返回成功。队列进程将从那里接收处理。 理想情况下,我想象我的服务可以返回“成功”,然后继续自行处理,但我不确定这是否可行。由于我的处理对时间敏感,启动新请求的后端处理是理想的,因此等待时间最短。 有没有其他想法,或者其中一个听起来更可取?
接收请求 使用传入的参数 分离后台进程(例如使用 BackgroundWorker)
返回确认 - 带有 Guid 或请求的类似标识符 做你的处理...
同时,调用者可以根据标识符 ping 您的服务以获取状态更新。
在处理过程中,返回“仍在工作”的响应,或者,如果您很聪明或可以准确预测它,则返回进度度量(可能是完成的百分比或剩余的时间) 处理完成后,向状态请求返回“成功”消息通过您之前回复的标识符提供解决方案