Aracılığıyla paylaş


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

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

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

Belirtiler

yöntemini kullandığınızda DataAdapter.Fill veya işlenmesi 90 saniyeden uzun süren bir ASP.NET Web uygulamasında 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, machine.config dosyasında özniteliğinin executionTimeout değeri 90 saniye olarak ayarlanır. bu hata, işleme süresi 90 saniyeyi aştığında 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.

executionTimeout özniteliği machine.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 ayarlayın

  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ını önlemek 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 ayarlayın

  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ını önlemek için özniteliğinin executionTimeout değerini değiştirin.

  4. machine.config dosyasını kaydedin.

Durum

Bu davranış, tasarım gereğidir.

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

  1. Microsoft Visual Studio'ya başlayın.

  2. Dosya menüsünde Yeni>Proje’yi seçin.

  3. Tüm proje türleri altında Tüm platformlar>Web'in altında Tüm diller>Windows'un altında Visual Basic'i seçin, şablonlar listesinden ASP.NET Web Uygulaması(.NET Framework) öğesini seçin ve ardından proje oluşturma sayfasında Web Forms'ı seçin. Varsayılan olarak WebForm1.aspx oluşturulur.

  4. Çözüm Gezgini'da WebForm1.aspx 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. Web.config dosyasını Not Defteri'nde 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 üzere ayarlamak için şu adımları izleyin:

    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