Вопрос

Я пытался установить время выполнения в файле web.config:

<compilation debug="false" targetFramework="4.5">
<httpRuntime executionTimeout="30"/>
.

Наблюдение на страницу запросов IIS Manager, я могу видеть, запросы не прекращаются через 30 секунд.
Должен ли я реализовать таймер внутри моего ihtpasynchandler?

Это было полезно?

Решение

с очевидным отсутствием встроенной поддержки для ihtpasynchandler тайм-аута, предположительно, вы должны управлять своим собственным таймутом. Возможно, это по дизайну; Ведь вы выбираете асинхронный рисунок - кто MSFT думает, что они пытаются установить время ожидания по умолчанию для вашей длительной работы?

Что я бы сделал, это использовать threadpool.registerwaitforsingleobject < / a> Для управления вашим опросом с соответствующим тайм-аутом. Вот образец кода, который я использую, чтобы избежать ожидания веб-службы, которая никогда не возвращается:

private const int REQUEST_TIMEOUT = 30000;   // miliseconds (30 sec)
private void CallService()
        {
        try {
             string url = "somewebservice.com";
             WebRequest request = WebRequest.Create(url);

             // Asynchronously fire off the request
             IAsyncResult result = request.BeginGetResponse(new AsyncCallback(MyRoutineThatUsesTheResults), request);

             // Handle timed-out requests
             ThreadPool.RegisterWaitForSingleObject(result.AsyncWaitHandle, new WaitOrTimerCallback(RequestTimeout), request, REQUEST_TIMEOUT, true);
         }
         catch (Exception ex) {
              _logger.Error("Error during web service request.", ex);
         }

private void RequestTimeout(object state, bool timedOut)
        {
            if (timedOut) {
                WebRequest request = (WebRequest)state;
                _logger.WarnFormat("Request to {0} timed out (> {1} sec)", request.RequestUri.ToString(), REQUEST_TIMEOUT / 1000);
                request.Abort();
            }
        }
.

Вам понадобится IASYNCRESULT для работы с этим подходом, но это установленный узор, у вас не должно быть проблем с бегом о.

Кроме того, вы столкнетесь с проблемами, когда IIS решает перерабатывать пул приложения / отрываться от вашего домена приложения, пока ваш опрос все еще работает. Если это состояние, которое вы хотите обрабатывать, вы можете использовать HostingenVironment.registerObject .

Другие советы

Вы можете попробовать добавить это в файл web.config:

<system.web>
  <pages asyncTimeout="30" />
</system.web>
.

Это для PageAsyncTask, но просто может быть удостоен для IHttpAsyncHandler тоже?

Если нет, у вас может быть больше удачи с новым генеракодицетагкодом в HttpTaskAsyncHandler 4.5 версии: http://www.asp.net/vnext/overview/whitepapers/whats-Ну # _TOC318097378

Вам придется использовать registerasynctask Проверьте ссылку ниже

http://msdn.microsoft.com/en-us/magazine/cc163725.aspx

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top