Как установить ihtpasynchandler время ожидания?
-
13-12-2019 - |
Вопрос
Я пытался установить время выполнения в файле 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();
}
}
.
Кроме того, вы столкнетесь с проблемами, когда 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 Проверьте ссылку ниже