iHttpasyNchandlerをタイムアウトに設定する方法
-
13-12-2019 - |
質問
web.configファイルに実行時間を設定しようとしました:
<compilation debug="false" targetFramework="4.5">
<httpRuntime executionTimeout="30"/>
.
IIS Managerリクエストを見ると、30秒後に要求が終了していないことがわかります。
IHTTPASynchandlerの中にタイマーを実装する必要がありますか?
解決
IhttpAsynchandlerタイムアウトのための内蔵サポートの明らかな欠如で、おそらくあなた自身のタイムアウトを管理する必要があります。おそらくこれは設計によるものです。すべてのあなたが非同期パターンを選択しています - MSFTを実行しているのは、長期実行タスクのデフォルトのタイムアウトを設定しようとしているのですか?
私がすることは適切なタイムアウトでポーリングを管理するため。これは私が返さないWebサービスを待たないようにするコードサンプルです:
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がApp Pool / App Domainをリサイクルすることを決定したときに問題に遭遇します。それがあなたが扱う条件であるならば、あなたは hostingenvironment.registerObject
他のヒント
registerasynctaskを使用する必要があるのは、以下のリンクを確認してください
所属していません StackOverflow