bir ASP.NET uygulamasında DataAdapter yöntemini kullandığınızda istek zaman aşımına uğradı hatası

Bu makale, bir ASP.NET Web uygulamasında hatanın (İstek Zaman Aşımına Uğradı) oluştuğu sorunu çözmenize yardımcı olur.

Orijinal ürün sürümü: ASP.NET
Özgün KB numarası: 825739

Belirtiler

yöntemini kullandığınızda DataAdapter.Fill veya bir ASP.NET Web uygulamasında işlenmesi 90 saniyeden uzun süren bir sorgu çalıştırdığınızda aşağıdaki hata iletisini alabilirsiniz:

HttpException (0x80004005): İstek zaman aşımına uğradı.

Bu hata yalnızca Web uygulamasını yayın modunda çalıştırdığınızda ve web.config dosyasındaki Debug özniteliğin değeri false olarak ayarlandığında oluşur.

Neden

Varsayılan olarak, özniteliğin executionTimeout değeri Machine.config dosyasında 90 saniye olarak ayarlanır. İşlem süresi 90 saniyeyi aştığında bu hata oluşur.

Geçici Çözüm

Bu sorunu geçici olarak çözmek için yapılandırma dosyasında özniteliği için executionTimeout ayarlanan zaman aşımı değerini artırın.

özniteliği, executionTimeoutMachine.config dosyasında altında <httpRequest> bulunur. Bu ayarları web.config dosyasında veya Machine.config dosyasında değiştirebilirsiniz. Zaman aşımı için varsayılan değer 90 saniyedir. özniteliği, executionTimeout bir isteğin ASP.NET Web uygulaması tarafından kapatılmadan önce çalışmasına izin verilen en fazla saniye sayısını gösterir.

Yöntem 1: Web.config dosyasında ExecutionTimeout öznitelik değerini ayarlama

  1. web.config dosyasını Not Defteri'nde açın.

  2. <httpRuntime> bölümüne öğesini <system.web> aşağıdaki gibi ekleyin:

    <configuration>
        <system.web>
            <httpRuntime executionTimeout="90" maxRequestLength="4096" useFullyQualifiedRedirectUrl="false"
            minFreeThreads="8" minLocalRequestFreeThreads="4" appRequestQueueLimit="100" />
        </system.web>
    </configuration>
    
  3. Zaman aşımı hatalarından kaçınmak için özniteliğinin executionTimeout değerini değiştirin.

  4. web.config dosyasını kaydedin.

Yöntem 2: Machine.config dosyasında ExecutionTimeout öznitelik değerini ayarlama

  1. Machine.config dosyasını Not Defteri'nde açın. Machine.config dosyası dizininde %SystemRoot%\Microsoft.NET\Framework\%VersionNumber%\CONFIG\ bulunur.

  2. Machine.config dosyasında öğesini bulun<httpRuntime>. web.config dosyası Web Uygulaması dizininde bulunur.

    <httpRuntime executionTimeout="90" maxRequestLength="4096" useFullyQualifiedRedirectUrl="false"
    minFreeThreads="8" minLocalRequestFreeThreads="4" appRequestQueueLimit="100" />
    
  3. Zaman aşımı hatalarından kaçınmak için özniteliğinin executionTimeout değerini değiştirin.

  4. Machine.config dosyasını kaydedin.

Durum

Bu davranış tasarımdan kaynaklanır.

Davranışı yeniden oluşturma adımları

  1. Microsoft Visual Studio .NET'i başlatın.

  2. Dosya menüsünde, Yeni'nin üzerine gelin ve Proje'yi seçin.

  3. Proje Türleri'nin altında Visual Basic Projeleri'ne tıklayın ve ardından Şablonlar'ın altında Web Uygulaması'nı ASP.NET seçin. Varsayılan olarak WebForm1.aspx oluşturulur.

  4. Tasarım görünümünde WebForm1'e sağ tıklayın ve Kodu Görüntüle'yi seçin.

  5. Veritabanı bağlantısını ve DataAdapter veri kümesini doldurma yöntemini eklemek için mevcut kodu aşağıdaki kodla değiştirin:

    Imports System.Data.SqlClient
    Public Class WebForm1
       Inherits System.Web.UI.Page
    
       Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
          Try
             Dim sConnectionString As String
             sConnectionString = "server=servername;uid=sa;pwd=password;database=testdatabase;"
             Dim objConn As SqlConnection
             objConn = New SqlConnection(sConnectionString)
             objConn.Open()
    
             Dim daAuthors As SqlDataAdapter
    
             'Increase the no.of records from existing value, if execution time is less than 90 sec.
             daAuthors = New SqlDataAdapter("Select top 60000 * From timelog (nolock)", objConn)
             Dim myDs As DataSet
             myDs = New DataSet("testTimelog")
             Dim dt As DateTime
             dt = New DateTime()
             dt = dt.Now
             Response.Write("StartTime of DataAdapter fill - " + dt)
             daAuthors.Fill(myDs, "testTimelog")
    
             dt = New DateTime()
             dt = dt.Now
             Response.Write("<br>EndTime of DataAdapter fill - " + dt)
             Response.Write("<br>No of Rows = " + myDs.Tables(0).Rows.Count.ToString())
    
          Catch ex As Exception
             Response.Write(ex.ToString())
          End Try
       End Sub
    End Class
    
  6. not defteri'nde web.config dosyasını açın ve özniteliğin Debug değerini aşağıdaki gibi false olarak ayarlayın:

    <configuration>
        <system.web>
            <compilation defaultLanguage="vb" debug="false" />
        </system.web>
    </configuration>
    
  7. Uygulamayı yayın modunda derlemek için ayarlayın. Bunu yapmak için şu adımları uygulayın:

    1. Çözüm Gezgini'da projenize sağ tıklayın.
    2. Özellikler'i ve ardından Configuration Manager'ı seçin.
    3. Etkin Çözüm Yapılandırması'nın altında Yayın'ı ve ardından Kapat'ı seçin.
    4. Tamam'ı seçin.
  8. Projeyi derlemek ve çalıştırmak için Hata Ayıkla menüsünde Başlat'ı seçin. Belirtiler bölümünde açıklanan hata iletisini alabilirsiniz.

Not

Machine.config dosyasında ayarlanan zaman aşımı için varsayılan değer 90 saniyedir. İşlem süresi 90 saniyeden kısaysa, getirilecek kayıt sayısını artırarak işlem süresini artırın.

Başvurular