Wie setze ich IHttpAsyncHandler ein Timeout?
-
13-12-2019 - |
Frage
Ich habe versucht, das Ausführungszeitlimit im Web festzulegen.konfigurationsdatei:
<compilation debug="false" targetFramework="4.5">
<httpRuntime executionTimeout="30"/>
Auf der Seite mit den IIS-Manager-Anforderungen kann ich sehen, dass die Anforderungen nach 30 Sekunden nicht beendet werden.
Sollte ich einen Timer in meinem IHttpAsyncHandler implementieren?
Lösung
mit dem scheinbaren Mangel an integrierter Unterstützung für iHttpasynchandler-Timeouts, vermutlich müssen Sie Ihr eigenes Timeout verwalten. Vielleicht ist das durch Design; Nach allem, was Sie ein asynchrones Muster auswählen -, der MSFT glaubt, dass sie versuchen, ein Standard-Timeout für Ihre lange Laufaufgabe festzulegen?
was ich tun würde, ist zu verwenden ThreadPool.RegisterwaitForsingleObject < / a> Um Ihre Wahl mit einem angemessenen Timeout zu verwalten. Hier ist ein Codebeispiel, mit dem ich vermeiden kann, auf einem Webdienst zu warten, der niemals zurückkehrt:
generasacodicetagpre.Sie werden auch in Problemen ausgeführt, wenn IIS entscheidet, Ihren App-Pool / Abreißen Ihrer App-Domäne zu recyceln, während Ihr Abfragen noch läuft. Wenn dies eine Bedingung ist, die Sie mithalten möchten, können Sie Hostingenvironment.RegisterObject .
Andere Tipps
Sie können versuchen, dies zu Ihrem hinzuzufügen web.config
Datei:
<system.web>
<pages asyncTimeout="30" />
</system.web>
Es ist für PageAsyncTask
, aber könnte nur dafür geehrt werden IHttpAsyncHandler
auch?
Wenn nicht, haben Sie vielleicht mehr Glück mit dem neuen HttpTaskAsyncHandler
in ASP.Net
version 4.5:http://www.asp.net/vnext/overview/whitepapers/whats-new#_Toc318097378
Sie müssten RegisterAynktask verwenden, überprüfen Sie den Link unten