如何等待长时间运行的Web服务调用以更新其状态?

时间:2017-08-02 15:44:03

标签: c# asp.net-mvc web-services

我有一个第三方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...
}

这很有效,但是我讨厌在生产网站上完成一段时间。有没有人有任何建议可以更好地处理这个问题?

1 个答案:

答案 0 :(得分:1)

您应该将其卸载到外部进程。您可以使用类似Hangfire之类的内容来启动任务,例如控制台应用程序。然后,您可以通过SignalR通过长轮询或服务器推送来监控作业的状态。您的主要网站操作只会触发并忘记工作并快速返回响应。然后,返回的网页将使用AJAX或Web Workers(与服务器端的SignalR一起)检查作业的状态,并在更新可用时向用户显示进度。

请参阅:http://docs.hangfire.io/en/latest/background-processing/tracking-progress.html