Soru Uzun ASP.NET işleminde IIS İstek Zaman Aşımı


Uzun bir işlem yürüttüğümde IIS'den bir istek zaman aşımı yaşıyorum. Sahnenin 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 oturumun zaman aşımına uğradığını düşünüyorum. Bu, IIS veya ASP.NET oturumunda bir sorun mu?

Şimdiden teşekkürler


76
2017-09-30 09:06


Menşei




Cevaplar:


Bir ASP.NET komut dosyasının yürütülmesi için izin verilen süreyi uzatmak istiyorsanız, Server.ScriptTimeout değer. Varsayılan .NET 1.x için 90 saniye ve .NET 2.0 ve sonraki için 110 saniyedir.

Örneğin:

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

Bu değer aynı zamanda web.config dosyada httpRuntime yapılandırma elemanı:

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

enter image description here

Lütfen notlarına göre MSDN belgeleri:

"Bu zaman aşımı yalnızca derlemedeki hata ayıklama özniteliği için geçerlidir.   öğe yanlıştır. Bu nedenle, hata ayıklama özniteliği doğruysa   kaçınmak için bu özelliği büyük bir değere ayarlamak zorunda değilsiniz   hata ayıklama yaparken uygulama kapatma. "

Bunu zaten yapmışsanız ancak oturumunuzun süresinin dolduğunu tespit ediyorsanız ASP.NET HttpSessionState.Timeout değeri:

Örneğin:

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

Bu değer aynı zamanda web.config dosyada sessionState yapılandırma elemanı:

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

Komut dosyanızın yürütülmesi birkaç dakika alıyorsa ve birçok eşzamanlı kullanıcı varsa, sayfayı Eşzamansız Sayfa. Bu, uygulamanızın ölçeklenebilirliğini artıracaktır.

Diğer alternatif ise, sunucuya yönetici erişiminiz varsa, bu uzun süren işlemi, zamanlanmış bir görev veya bir windows hizmeti olarak uygulamak için bir aday olarak düşünmektir.


131
2017-09-30 13:02



FYI httpRuntime executionTimeout saniyeler içinde ve büyük harf T var - Andrew Rimmer
Bu zaman aşımı değerinin kullanılması için hata ayıklama modunun false olarak ayarlanması da önemlidir: <system.web> <derleme debug = "false" targetFramework = "4.0" /> </ system.web> - Jesse Roper
@JesseRoper, eğer bu konuyla ilgili dokümanları bana gösterebilirseniz, o zaman cevabın içine dahil olmaktan mutlu olurum veya cevabımı doğrudan düzenleyebilirsiniz. Ta. - Kev
Varsayılan executionTimeout değeri 110 saniyedir. - frattaro


Büyük ve kapsamlı bir cevap @Kev!

Bir WebForms uygulamasında sadece bir yönetici sayfasında uzun süre işlem yaptığım için kod seçeneğini kullandım. Ama üretimde geçici bir hızlı düzeltmeye izin vermek için yapılandırma sürümünü bir <location> web.config dosyasında etiket. Bu şekilde, yönetici / işlem sayfam yeterli zaman aldı, son kullanıcılar için sayfalar ve eski zaman aşımı davranışlarını sürdürdü.

Aşağıda, aynı hızlı düzeltmeye ihtiyacı olan Google çalışanlarının yapılandırmasını verdim. '4 saatlik' örneğimden başka değerler kullanmalısın ama YAP seansa dikkat et timeOut istekte iken, dakikalar içinde executionTimeout saniyeler içinde!

Ve - zaten 2015 olduğundan - bir NON-Quickfix için kullanmalısınız. Net 4.5 zaman uyumsuz / bekliyoruz Şimdi mümkün ise, KEV 2010 yılında cevap verdiğinde, .NET 2.0'ın ASYNC sayfası yerine :).

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

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

20
2018-02-01 11:07



Web.config sayfamdaki "konum" snippet'ini ekledim, ancak çalışmıyor. Sadece "executionTimeout" kullanıyorum, "sessionState" ye ihtiyacım yok. Başka bir şey yapılandırmak zorunda mıyım? NET 4.0 kullanıyorum. "HttpRuntime" ı doğrudan "system.web" içinde kullanırsam, tüm sayfalarda zaman aşımını doğru uygular. - Oliver


Bunu buraya gönderiyorum çünkü 3 ve 4 saat gibi harcadım ve sadece yukarıdakiler gibi cevaplar buldum, executionTimeAncak, kullandığınız durumda sorunu çözmez ASP .NET Çekirdeği. Bunun için işe yarayacak:

Web.config dosyasında, requestTimeout özniteliği aspNetCore düğümü.

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

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

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


3
2018-06-19 15:29





Kaldır ~ konumdaki karakter yani

path="~/Admin/SomePage.aspx"

olur

path="Admin/SomePage.aspx"

-4
2017-10-28 20:08