2010-05-26 5 views
18

Ich habe eine ASP.NET-Webanwendung, die ich nicht ändern kann (ich habe nur die Binärdateien). Diese Anwendung stellt eine Verbindung zu einem Webdienst her und es scheint, als wäre die Verbindung von der Clientseite (meiner Webanwendung) aus geschlossen. Ich habe die "executionTimeout" in der machine.config des Zielservers erhöht, aber meine Web-App scheint immer noch zu stoppen, nachdem ich eine Weile gewartet habe.Wie kann das Zeitlimit für eine Web-Service-Anfrage erhöht werden?

Gibt es eine Möglichkeit, die Timeout-Zeit für meine Webanwendung zu erhöhen, indem Sie einfach die Datei web.config ändern? Wie ich schon sagte ... Ich kann das Timeout im Code nicht ändern, so dass meine einzige Option über Config-Dateien wäre.

Danke!

+0

Welche Art von Web-Service? ASP.NET/ASMX oder WCF ?? ASMX wird normalerweise in Code behandelt, es sei denn, Sie haben speziell etwas getan, um das Timeout in der Konfiguration angeben zu können. WCF ist für fast alles konfiguriert. –

+0

Die Remote-Webdienste sind in der Tat ein ASP.NET ASMX-Webdienst. Wie bereits erwähnt, kann ich den Code in meiner App nicht ändern (da ich nur die Binärdateien habe). – sachaa

+0

Haben Sie eine Konfigurationsdatei? – Nix

Antwort

24

Versuchen Sie, ob dies für Sie arbeiten würde.

Zuerst müssen Sie das Timeout des Attributs executionTimeout des httpRuntime-Elements erhöhen. Beachten Sie, dass dies im Gegensatz zu den anderen Timeout-Attributen wie Session-Timeout und anderen in Sekunden erwähnt wird.

<httpRuntime 
    executionTimeout="36000" 

Und darüber hinaus nimmt dieses Attribut nur wirksam, wenn Sie das Debug-Attribut des Kompilierung-Elements auf false gesetzt. Dies wird auch in dem von Ihnen erwähnten MSDN-Link angegeben. Wie,

<compilation 
    debug="false" 
../> 

Aber das funktioniert in Verbindung mit dem Session-Timeout. Ja, wenn die Sitzung abläuft, wird ein Fehler ausgegeben. und es würde nicht warten, bis der executionTimeout-Wert wirksam wird. Sie müssen das Session Timeout also auf einen höheren Wert setzen. Und beachte, dass dies in Minuten ist. Das würde aussehen,

<sessionState 
    mode="InProc" 
    timeout="360" 
    ... 
    /> 

Und beachten Sie, dass dies alles durch AppPool Recycling-Prozess überschrieben würde. Daher müssen Sie den Leerlauf-Timeout-Wert des Apppools, den Ihre Website verwendet, auf mindestens den gleichen/höheren Wert als das Sitzungszeitlimit setzen.

ich es hier http://www.eggheadcafe.com/community/aspnet/17/10111748/how-can-we-increase-the-t.aspx

+0

Ich bin etwas überrascht, dass die Sitzung eine Zeitüberschreitung haben kann, während eine Anfrage in dieser Sitzung ausgeführt wird. –

+0

Übrigens können Sie es auch auf dem VS2008 "Dummy IIS" testen, wenn Sie debug auf false setzen. – daitangio

+2

36000 Sekunden = 600 Minuten – martijn

4

Die Standard-Timeout von Web-Anwendung sind 90 Sekunden in der Regel für allgemeine Zwecke mehr als ausreichend ist. Es ist wichtig zu wissen, woher das Timeout kommt. Ist es von der Seite selbst oder etwas in der Seite, die es verursacht. In jedem Fall scheint es, dass die "Seite" abgelaufen ist.

Ich stolperte über diese Frage, als meine Seite auch ausging. Es wurde herausgefunden, dass die Ausnahme von SQL kommt (lies den eigentlichen Fehler), also war es wirklich ein SQL-Problem. Sobald ich es wusste, konnte ich es leicht beheben.

+0

I + 1'd dies, weil ein junger Entwickler viel zu oft direkt zur Timeout-Pumpe läuft. In Wirklichkeit ist ein schwerer Aufruf wie Regex oder eine SQL-Abfrage, die keine indizierten Felder oder etwas anderes verwendet, das Problem. Nimm immer zuerst an, dass das Timout weit genug ist und dass es überläuft, weil etwas im Code optimiert werden könnte. Nur als fundierte Designentscheidung sollte ExecutionTimeout erhöht werden. – Suamere

+0

Mein Timeout wurde durch eine Abfrage verursacht, die 1 Minute 43 Sekunden dauerte und von einem Kollegen geschrieben wurde. Es gab so viele komplexe Unterklauseln und Auswahlen von Auswahlen, dass ich Angst hatte, sie zu berühren. Aber ich habe eine Klausel in eine temporäre Tabelle gezogen und eine LEFT (, LEN (REPLACE (....))) Abfrage für die temporäre Tabelle und nicht für eine Unterklausel der Abfrage ausgeführt. Dann schloss ich die Abfrage an die temporäre Tabelle an. Ausführungszeit: bis zu 2 Sekunden. Nahm ungefähr eine halbe Stunde. [Schlägt an den Fingern]. – Resource

Verwandte Themen