如何从ASP.NET应用程序异步调用Web服务?

时间:2010-08-27 19:02:20

标签: asp.net web-services asynchronous

我需要从ASP.NET应用程序异步调用Web服务。 aspx不需要Web服务的答案。这只是一个简单的通知。

我正在使用来自网络服务存根和...Async()的{​​{1}}方法。

<%@Page Async="True" %>

我的问题:网页请求正在等待网络服务响应。

如何解决这个问题?如何在Web服务关闭或出现过载时避免任何资源泄漏?

4 个答案:

答案 0 :(得分:1)

Web服务代理通常也有Begin和End方法。你可以使用这些。下面的示例显示了如何调用begin方法并使用回调来完成调用。对MakeWebServiceAsynCall的调用将立即返回。 using语句将确保对象安全放置。

void MakeWebServiceAsynCall()
    {
        WebServiceProxy proxy = new WebServiceProxy();
        proxy.BeginHelloWorld(OnCompleted, proxy);
    }
    void OnCompleted(IAsyncResult result)
    {
        try
        {
            using (WebServiceProxy proxy = (WebServiceProxy)result.AsyncState)
                proxy.EndHelloWorld(result);
        }
        catch (Exception ex)
        {
            // handle as required
        }
    }

如果您需要知道通话是否成功,则需要等待结果。

答案 1 :(得分:0)

在您的方案中,您可以使用ThreadPool ThreadPool.QueueUserWorkItem(...) 在池中的线​​程中调用Web服务。

答案 2 :(得分:0)

我之前使用过简单的线程来做到这一点。例如:

Thread t = new Thread(delegate()
{
    ws.HelloWorld();
});
t.Start();

该方法返回后,该线程将继续运行。环顾四周,似乎ThreadPool方法isn't always recommended

答案 3 :(得分:0)

启动新线程可能是最简单的解决方案,因为您不关心获得结果的通知。

new Thread(() => ws.HelloWorld()).Start