Как асинхронно вызвать веб-сервис из приложения ASP.NET? - PullRequest
6 голосов
/ 27 августа 2010

Мне нужно асинхронно вызывать веб-сервис из приложения ASP.NET.Aspx не нуждается в ответе от веб-службы.Это просто простое уведомление.

Я использую метод ...Async() из заглушки веб-службы и <%@Page Async="True" %>.

ws.HelloWorldAsync();

Моя проблема: запрос веб-страницы ожидает ответа веб-службы.

Как решить эту проблему?Как избежать утечки ресурсов при недоступности веб-службы или при перегрузке?

Ответы [ 4 ]

1 голос
/ 31 августа 2010

Прокси-сервер веб-службы обычно также имеет метод 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
        }
    }

Если вам необходимо узнать, был ли вызов успешным или нет, вам нужно дождаться результата.

0 голосов
/ 30 августа 2010

Я использовал простые темы, чтобы сделать это раньше.Пример:

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

Поток продолжит работу после возврата метода.Оглядываясь вокруг, кажется, что подход ThreadPool не всегда рекомендуется

0 голосов
/ 30 августа 2010

Создание нового потока, вероятно, самое простое решение, так как вам не нужно получать уведомление о результате.

new Thread(() => ws.HelloWorld()).Start
0 голосов
/ 30 августа 2010

В вашем сценарии вы можете использовать ThreadPool ThreadPool.QueueUserWorkItem (...) для вызова веб-службы в объединенном потоке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...