2009-05-26 27 views
5

Mam stronę, która może potrwać kilka minut. Po ustawieniu debug="false" w znaczniku <compilation /> w pliku web.config otrzymuję komunikat "Upłynął limit czasu żądania". Błąd (i spróbuj wewnętrzny/bloki catch w kodzie dostać „Temat był przerwany.” Błąd."Żądanie przekroczono limit czasu". błąd podczas ustawiania debug = "false"

Co to poprawkę, aby umożliwić długie stron do uruchomienia w trybie produkcyjnym? Czy tryb debugowania mają nieskończony czas oczekiwania?

+0

Czy na pewno chcesz stronę, która trwa kilka minut, aby uruchomić? Czy możesz przenieść tę funkcję do planowanej aplikacji konsolowej? – sisve

+0

Ehh ... dostęp do niego można uzyskać tylko za pośrednictwem formularza internetowego, co ułatwia korzystanie z niego. Jest to strona chroniona, a zaplanowane zadanie trafia ją co noc. "Właściwą" rzeczą do zrobienia jest prawdopodobnie wyrzucenie tych zadań za pośrednictwem usługi Windows lub coś takiego, ale jeśli nie jest zepsute, pracuj nad czymś, co naprawdę może pomóc w generowaniu przychodów :) – JerSchneid

Odpowiedz

5

Powinieneś po prostu zwiększyć limit czasu skryptu do wykonywania stron. Domyślnie jest to 90 sekund, więc jeśli potrzebujesz więcej czasu, zmienić go w następnym elementem system.Web (atrybut executionTimeout):

<httpRuntime executionTimeout="seconds" 
      maxRequestLength="kbytes" 
      minFreeThreads="numberOfThreads" 
      minLocalRequestFreeThreads="numberOfThreads" 
      appRequestQueueLimit="numberOfRequests" 
      useFullyQualifiedRedirectUrl="true|false" /> 
+0

Oprócz zwiększenia czasu oczekiwania, możesz również chcesz sprawdzić, czy strona jest asynchroniczna. Długa strona w trybie synchronicznym zużywa wątek na czas trwania. Uczyniając to asynchronicznie, uwalniasz wątek ASP.NET, aby mógł on przetwarzać inne żądania, podczas gdy dodatkowy wątek jest tworzony w tle, aby obsłużyć twoje długo działające żądanie. Obecnie asynchroniczne strony ASP.NET są dość łatwe w użyciu. – jrista

5

można ustawić max czas dla żądań w pliku web.config..

<system.web> 
    ... 
    <httpRuntime executionTimeout="600" /> 

Gdzie executionTimeout określa maksymalną liczbę sekund, że wniosek jest dozwolone wykonać przed automatycznie zamknięty przez ASP.NET szczegóły mogą zostanie znaleziona here.

Powiązane problemy