тайм-аут для асинхронного вызова веб-службы в C # - PullRequest
3 голосов
/ 11 февраля 2009

Я использую C # и создал прокси-сервер из ASP.Net asmx Web Service на стороне клиента, используя функцию Добавить веб-ссылку ... VSTS 2008.

И я использую асинхронную модель вызова метода (то есть вызываю метод AsyncXXX, который немедленно вернется) и обрабатывает событие complete (я добавляю обработчик события для обработки завершения, даже когда ответ получен со стороны сервера).

Я считаю, что если в течение длительного времени нет ответа от сервера, полное событие не будет запущено.

Мои вопросы,

  1. Это ожидаемая функция или моя ошибка, что если нет ответа от сервера после вызова метода AsyncXXX, полный обработчик события не будет вызван?

  2. Есть ли способ назначить значение тайм-аута, чтобы я не ждал бесконечно полного обработчика событий?

спасибо заранее, George

Ответы [ 3 ]

3 голосов
/ 11 февраля 2009

В web.config для вашего веб-сервиса вы можете установить тайм-аут (вам также нужно будет изменить его, чтобы он не находился в режиме отладки, если он есть). Это должно затем вызвать исключение, которое вызовет ваше завершенное событие. Затем вам нужно будет проверить исключение, чтобы проверить, прошло оно или нет.

<system.web>
    <httpRuntime executionTimeout="120" />
</system.web>
0 голосов
/ 09 октября 2009

Если вы хотите, чтобы ваш веб-сервис никогда не прерывался, вы можете поместить эту строку в класс веб-сервисов:

this.Timeout = System.Threading.Timeout.Infinite;
0 голосов
/ 11 февраля 2009

SoapHttpClientProtocol, от которого ваш прокси должен унаследовать, есть свойство Timeout, унаследованное от его предка WebClientProtocol. Это может ответить на ваш второй вопрос.

...