Frage Zeitlimit für IIS-Anforderung bei langem ASP.NET-Vorgang


Ich habe ein Anforderungstimeout von IIS, wenn ich eine lange Operation ausführe. Hinter der Szene verarbeitet meine ASP.NET-Anwendung Daten, aber die Anzahl der Datensätze, die verarbeitet werden, ist groß und daher dauert die Operation sehr lange.

Ich denke jedoch, dass IIS die Sitzung abbricht. Ist das ein Problem mit der IIS- oder ASP.NET-Sitzung?

Danke im Voraus


75
2017-09-30 09:06


Ursprung


Antworten:


Wenn Sie die für die Ausführung eines ASP.NET-Skripts zulässige Zeit verlängern möchten, erhöhen Sie den Wert Server.ScriptTimeout Wert. Der Standardwert ist 90 Sekunden für .NET 1.x und 110 Sekunden für .NET 2.0 und höher.

Beispielsweise:

// Increase script timeout for current page to five minutes
Server.ScriptTimeout = 300;

Dieser Wert kann auch in Ihrem konfiguriert werden web.config Datei in der httpRuntime Konfigurationselement:

<!-- Increase script timeout to five minutes -->
<httpRuntime executionTimeout="300" 
  ... other configuration attributes ...
/>

enter image description here

Bitte beachten Sie die MSDN-Dokumentation:

"Dieses Timeout gilt nur für das Debug-Attribut in der Kompilierung   Element ist falsch. Wenn das Debug-Attribut True ist, tun Sie das also   muss dieses Attribut nicht auf einen großen Wert setzen, um dies zu vermeiden   Anwendung heruntergefahren, während Sie debuggen. "

Wenn Sie dies bereits getan haben, aber feststellen, dass Ihre Sitzung abläuft, erhöhen Sie die ASP.NET HttpSessionState.Timeout Wert:

Beispielsweise:

// Increase session timeout to thirty minutes
Session.Timeout = 30;

Dieser Wert kann auch in Ihrem konfiguriert werden web.config Datei in der sessionState Konfigurationselement:

<configuration>
  <system.web>
    <sessionState 
      mode="InProc"
      cookieless="true"
      timeout="30" />
  </system.web>
</configuration>

Wenn Ihr Skript mehrere Minuten für die Ausführung benötigt und viele gleichzeitige Benutzer vorhanden sind, sollten Sie die Seite in eine ändern Asynchrone Seite. Dies erhöht die Skalierbarkeit Ihrer Anwendung.

Die andere Alternative, wenn Sie Administratorzugriff auf den Server haben, besteht darin, diese lange laufende Operation als einen Kandidaten für die Implementierung als eine geplante Aufgabe oder einen Windows-Dienst zu betrachten.


130
2017-09-30 13:02



Große und erschöpfende Antwort @Kev!

Da ich lange nur in einer Admin-Seite in einer WebForms-Anwendung gearbeitet habe, habe ich die Code-Option verwendet. Aber um eine temporäre schnelle Reparatur der Produktion zu ermöglichen, habe ich die config Version in einem <location> Tag in web.config. Auf diese Weise hat meine Admin / Processing-Seite genug Zeit bekommen, während Seiten für Endbenutzer und so ihr altes Timeout-Verhalten beibehalten haben.

Im Folgenden habe ich die Konfiguration für Sie Googler, die die gleiche schnelle Lösung benötigen. Sie sollten natürlich andere Werte als mein '4 Stunden' Beispiel verwenden, aber MACHEN Beachten Sie, dass die Sitzung timeOut ist in Minuten, während der Anfrage executionTimeout ist in Sekunden!

Und - da es schon 2015 ist - für einen NON-Quickfix sollten Sie .Net 4.5's verwenden async / erwarten jetzt, wenn überhaupt möglich, anstelle der ASYNC-Seite von .NET 2.0, die Stand der Technik war, als KEV 2010 antwortete :).

<configuration>
    ... 
    <compilation debug="false" ...>
    ... other stuff ..

    <location path="~/Admin/SomePage.aspx">
        <system.web>
            <sessionState timeout="240" />
            <httpRuntime executionTimeout="14400" />
        </system.web>
    </location>
    ...
</configuration>

19
2018-02-01 11:07



Ich poste das hier, weil ich ungefähr 3 und 4 Stunden damit verbracht habe, und ich habe nur Antworten wie jene oben gefunden, die sagen, fügen Sie die hinzu executionTime, aber es löst nicht das Problem in dem Fall, dass Sie verwenden ASP.NET-Kern. Dafür würde es funktionieren:

Fügen Sie in der Datei web.config die Datei hinzu requestTimeout Attribut bei aspNetCore Knoten.

<system.webServer>
  <aspNetCore requestTimeout="00:10:00" ... (other configs goes here) />
</system.webServer>

In diesem Beispiel setze ich den Wert für 10 Minuten.

Referenz: https://docs.microsoft.com/en-us/aspnet/core/hosting/aspnet-core-module#configuring-the-asp-net-core-module


3
2018-06-19 15:29



Löschen ~ Zeichen in der Position damit

path="~/Admin/SomePage.aspx"

wird

path="Admin/SomePage.aspx"

-4
2017-10-28 20:08