Uzun ASP.NET işleminde IIS İsteği Zaman Aşımı


89

Uzun bir işlemi çalıştırdığımda IIS'den istek zaman aşımı yaşıyorum. Sahne arkasında ASP.NET uygulamam veri işliyor, ancak işlenmekte olan kayıtların sayısı büyük ve bu nedenle işlem uzun sürüyor.

Ancak, IIS'nin oturumu zaman aşımına uğradığını düşünüyorum. Bu, IIS veya ASP.NET oturumuyla ilgili bir sorun mu?

Şimdiden teşekkürler

Yanıtlar:


147

Bir ASP.NET betiğinin yürütülmesi için izin verilen süreyi uzatmak istiyorsanız, Server.ScriptTimeoutdeğeri artırın . Varsayılan değer, .NET 1.x için 90 saniye ve .NET 2.0 ve sonrası için 110 saniyedir.

Örneğin:

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

Bu değer, web.configdosyanızın httpRuntimeyapılandırma öğesinde de yapılandırılabilir:

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

görüntü açıklamasını buraya girin

Lütfen MSDN belgelerine göre not edin :

"Bu zaman aşımı, yalnızca derleme öğesindeki hata ayıklama özniteliği False ise geçerlidir. Bu nedenle, hata ayıklama özniteliği Doğru ise, hata ayıklama sırasında uygulamanın kapanmasını önlemek için bu özniteliği büyük bir değere ayarlamanız gerekmez. "

Bunu zaten yaptıysanız ancak oturumunuzun süresinin dolduğunu fark ediyorsanız, ASP.NET HttpSessionState.Timeoutdeğerini artırın :

Örneğin:

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

Bu değer, web.configdosyanızın sessionStateyapılandırma öğesinde de yapılandırılabilir:

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

Komut dosyanızın yürütülmesi birkaç dakika sürüyorsa ve çok sayıda eşzamanlı kullanıcı varsa, sayfayı Eşzamansız Sayfa olarak değiştirmeyi düşünün . Bu, uygulamanızın ölçeklenebilirliğini artıracaktır.

Diğer alternatif, sunucuya yönetici erişiminiz varsa, bu uzun süredir devam eden işlemi zamanlanmış bir görev veya bir Windows hizmeti olarak uygulamaya aday olarak düşünmektir.


Bilginize httpRuntime executionTimeout saniye cinsindendir ve büyük T
harfine

7
Bu zaman aşımı değerinin kullanılması için hata ayıklama modunun yanlış olarak ayarlanması da önemlidir: <system.web> <compilation debug = "false" targetFramework = "4.0" /> </ system.web>
Jesse Roper

@JesseRoper, beni bu konudaki dokümanlara yönlendirebilirseniz, bunu cevaba dahil etmekten memnuniyet duyarım veya cevabımı doğrudan düzenleyebilirsiniz. Ta.
Kev

Varsayılan yürütme zaman aşımı değeri 110 saniyedir.
frattaro

21

@Kev'den harika ve kapsamlı yanıt!

Bir WebForms uygulamasında yalnızca bir yönetici sayfasında uzun işlem yaptığım için kod seçeneğini kullandım. Ancak üretimde geçici bir hızlı düzeltmeye izin vermek için yapılandırma sürümünü <location>web.config içindeki bir etikette kullandım . Bu şekilde, yönetici / işleme sayfam yeterli zaman alırken, son kullanıcılar ve benzeri sayfalar eski zaman aşımı davranışlarını korudu.

Aşağıda, aynı hızlı düzeltmeye ihtiyaç duyan Google çalışanları için yapılandırmayı verdim. Sen tabii diğer benim '4 saat' Örneğin daha değerleri, fakat kullanması gereken DO oturumu O notu timeOutdakika içinde istek iken, executionTimeoutsaniye var!

Zaten 2015 beri - - Ve OLMAYAN Quickfix için .NET kullanmalısınız 4.5 en zaman uyumsuz / bekliyoruz şimdi mümkünse, bunun yerine KEV 2010 yılında yanıtladığı modern oldu .NET 2.0'ın ASYNC sayfasının eğer :).

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

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

"Konum" parçacığını web.config dosyama ekledim ama çalışmıyor. Ben sadece "executionTimeout" kullanıyorum, "sessionState" ye ihtiyacım yok. Başka bir şey yapılandırmam gerekiyor mu? NET 4.0 kullanıyorum. "HttpRuntime" ı doğrudan "system.web" içinde kullanırsam, zaman aşımını tüm sayfalarda doğru şekilde uygular.
Oliver

12

Bunu buraya gönderiyorum, çünkü üzerine 3 ve 4 saat harcadım ve sadece yukarıdakilere benzer cevaplar buldum, diyen, şunu ekleyin executionTime, ancak bu durumda sorunu çözmez ASP .NET Core kullanıyorsunuz . Bunun için bu işe yarar:

Web.config dosyasında, node'a requestTimeoutözniteliği ekleyin aspNetCore.

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

Bu örnekte, değeri 10 dakikaya ayarlıyorum.

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


Bu yalnızca OutOfProcessbarındırma modeli için geçerlidir . Çünkü InProcesszaman aşımı ayarı yoktur. IIS, sürecin tamamlanmasını beklemeye devam edecek, buraya bakın: github.com/dotnet/AspNetCore.Docs/issues/16870
Rosdi Kasim

-10

Konumdaki ~karakteri kaldırarak

path="~/Admin/SomePage.aspx"

olur

path="Admin/SomePage.aspx"

Soruya cevap vermiyor
Igor
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.