我有一个第三方Web服务,我需要从我的ASP.NET MVC应用程序中的控制器调用。我为所提供的WSDL添加了一个服务引用并使所有内容都运行,但事实证明,Web服务需要很长时间才能完成(60+秒)。
我必须创建一个客户端并监视该客户端的状态,以确定服务何时完成。根据他们的示例代码,它应该看起来像这样:
using (var client = new WebServiceClient())
{
// Omit all irrelevant client setup...
client.Process();
while (client.Status == "Processing")
System.Threading.Thread.Sleep(1000);
// The call is finished and the values in the client are now useable...
}
这很有效,但是我讨厌在生产网站上完成一段时间。有没有人有任何建议可以更好地处理这个问题?
答案 0 :(得分:1)
您应该将其卸载到外部进程。您可以使用类似Hangfire之类的内容来启动任务,例如控制台应用程序。然后,您可以通过SignalR通过长轮询或服务器推送来监控作业的状态。您的主要网站操作只会触发并忘记工作并快速返回响应。然后,返回的网页将使用AJAX或Web Workers(与服务器端的SignalR一起)检查作业的状态,并在更新可用时向用户显示进度。
请参阅:http://docs.hangfire.io/en/latest/background-processing/tracking-progress.html