Makale numarası: 917069 - Son Gözden Geçirme: 05 Aralık 2007 Çarşamba - Gözden geçirme: 3.3

Uygulama işlem içi COM + bileşenleri istediğinde bir istek zaman aşımına uğrarsa, bir ASP.NET uygulamasının gecikmeler yaşayabilir

Sistem İpucuBu makale, kullandığınızdan farklı bir işletim sistemine yöneliktir. Sizinle ilgili olmayabilecek makale içeriği devre dışı bırakıldı.

Bu Sayfada

Hepsini aç | Hepsini kapa

Belirtiler

Şu senaryoyu inceleyin. Bir Microsoft ASP.NET uygulama işlem içi Microsoft COM + Bileşenleri'ni başlatır. Bazı işlemler, bir COM + bileşeni ortaya gibi istek şu anda kesin zaman aşımına uğradı. Bu senaryoda, COM + çal??ma zaman?, Windows hata bildirimi alt sisteminde bir hata bildirebilir. Sonra Windows hata raporlaması, uygulamada ek gecikmelere neden ve temel sorun bileşik eylemler alabilir. Olay Görüntüleyicisi'nde Sistem günlüğünü görüntülediğinizde, aşağıdakine benzer bir olay görebilirsiniz:

COM + olay KIMLIĞI: 4768
Olay türü: hata
Olay kaynağı: COM +
Olay kategorisi: Bilinmeyen olay
KİMLİĞİ: 4786
Açıklama: Sistem, bir özel bileşenini çağırdı ve bu bileşen başarısız bir özel durum oluşturdu. Bu, özel bileşenle ilgili bir sorunu gösterir. Bir hata oluştu, bu bileşenin geliştiricisini uyar ve bunları aşağıdaki bilgileri sağlar.
Yöntem adı: IObjectControl::Deactivate()
Özel durum: E0434F4D
Adres: 0x77E649D3
Yığın arayın:
Kernel32! RaiseException + 0x48
mscorsvr! CoEEShutDownCOM + 0xe448
mscorsvr! CoEEShutDownCOM + 0xe3cb
mscorsvr! CoEEShutDownCOM + 0xe37f
mscorsvr! CoEEShutDownCOM + 0xe322
mscorsvr! GetMetaDataPublicInterfaceFromInternal + 0x26ef
mscorsvr! CoEEShutDownCOM + 0x15eae
mscorsvr! ReleaseFusionInterfaces + 0x1d2fa
Comsvcs! RegisterComEvents + 0x3f074
Comsvcs! RegisterComEvents + 0x40146
Ole32! ReadStringStream + 0x22057
Ole32! CreateDataAdviseHolder + 0x1534
Ole32! CoQueryAuthenticationServices + 0xf5f
Ole32! CoQueryAuthenticationServices + 0x1b06
Ole32! CoQueryAuthenticationServices + 0x2236
Olay türü: hata
Olay kaynağı: Uygulama hatası
Olay kategorisi: (100)
Olay KIMLIĞI: 1000
Açıklama: uygulama w3wp.exe, sürüm 6.0.3790.1830, kernel32.dll modülünde, <a1>Sürüm</a1> 5.2.3790.2756, hata adresi 0x00015e02 hatalı. Daha fazla bilgi için Yardım ve Destek Merkezi'ne bakın: http://go.microsoft.com/fwlink/events.asp.
Veri: 0000: 41 70 70 6 c 63 61 69 74 Applicat 0008: 69 6f 6e 20 46 61 69 6 c iyon başarısızlık 0010: 75 72 65 20 20 77 33 77 ure w3w 0018: 70 2e 65 78 65 20 36 2e p.exe 6. 0020: 30 2e 33 37 39 30 2e 31 0.3790.1 0028: 38 33 30 20 69 6e 20 6b 830 da k 0030: 65 72 6e 65 6 c 33 32 2e ernel32. 0038: 64 6 c 6 c 20 35 2e 32 2e dll 5.2. 2e 32 37 35 3790.275 0048: 36 20 61 74 20 6f 0040: 37, 39 30 33 66 66 6'saatinde 0050: 73 65 74 20 30 30 30 31 kümesi 0001 0058: 35 65 30 32 5e02 kapalı.

Neden

Bir ASP.NET isteğinin zaman aşımı eşik aşıldığında, bu sorun oluşur. ASP.NET çalışma zamanı isteğini, isteği işleyen iş parçacığının ThreadAbortException özel durum üretiliyor tarafından durdurur. ASP.NET istek işlem içi COM + bileşeni çağırır ve ThreadAbortException özel durum bir anda bir bileşeninin IObjectControl yöntemlerden birini çalıştırıyorsanız, COM + çalışma zamanı özel durumu yakalamak ve Windows hata raporlaması için hata raporu. Sonra Windows hata bildirimi olay günlük girdilerini oluşturun ve hata sunucuları ile iletişim kurar. Bu davranış oluştuğunda, ASP.NET istek çalışan iş parçacığının engeller ve yanıt geciktirilebilir. Windows hata raporlama işleminin bir döküm dosyası oluşturabilir. Bu davranış oluştuğunda, işlem dondurulur ve tüm yanıtlar gecikti. Bu hataları ortaya çıktığında, işlem içi (kitaplık) COM + uygulamaları barındıran işlem sonlandırılır. Ayrıca, döngü sırasında sonraki zaman aşımlarının yineleyin ve ek gecikmelere neden.

Not "Daha fazla bilgi" bölümündeki örnek, bir Microsoft .NET Framework ServicedComponent sınıfını kullanır. Uygulama yönetilmeyen COM + bileşenleri kullanır ancak aynı sorun ortaya çıkabilir.

Çözüm

Bu sorunu gidermek için <a0></a0>, ASP.NET zaman aşımı kaçının. ASP.NET istek zaman aşımı eşiği aşan beklenmiyordu, araştırmak ve alttaki gecikmeler kaynağını çözmek. Aşağıdaki yöntemlerden temel gecikme kaynağını bulmak için etkin araçları olabilir:
  • Işlemin temel gecikme alınmış, döküm dosyalarını çözümleyebilirsiniz.
  • Uygulamayı altında bir profil oluşturucu yardımcı programını çalıştırın.
  • Oturum boyunca, uygulamayı kullanın.
Bazı senaryolarda, istekleri, varsayılan ASP.NET istek zaman aşımı daha uzun sürmesine için beklenmelidir. Bu senaryolarda, zaman aşımı değerini daha uygun bir değerle değiştirmeniz gerekir. Bunu yapmak için aşağıdaki yöntemlerden birini kullanın:
  • ExecutionTimeout ayarını kullanın.
  • Server.ScriptTimeout özelliği kullanın.

Pratik Çözüm

Bu soruna geçici bir çözüm bulmak için <a0></a0>, alınmış işlem dışı (sunucu) uygulama işlem içi (kitaplık) uygulamasından bir COM + uygulamasını değiştirebilirsiniz. Bir sunucu uygulaması, COM + bileşenleri ayrı bir işlemde ASP.NET isteklerden çalıştırın. Bu nedenle, COM + çal??ma zaman? ThreadAbortException bir özel durum algılamaz ve Windows hata bildirimi alt sistem özel durumu bildirdi.

Durum

Microsoft, "Geçerli Olduğu Ürünler" bölümünde listelenen Microsoft ürünlerinde bu sorunun olduğunu onaylamıştır.

Sorunu Yeniden Oluşturma Adımları

  1. Basit bir ServicedComponent sınıfı oluşturmak ve sonra sınıfı COM + yüklemeniz 306296 Microsoft Bilgi Bankası makalesindeki adımları izleyin. Daha fazla bilgi için, Microsoft Bilgi Bankası'ndaki makaleyi görüntülemek üzere aşağıdaki makale numarasını tıklatın:
    306296  (http://support.microsoft.com/kb/306296/ ) Visual C# .NET ile servis verilen bir .NET bileşeni oluşturma
  2. Aşağıdaki kod örneği eklemek için ServicedComponent void Activate() korumalı ResultClass
    protected override void Activate()
    {
    	// Sleep for 100 seconds.
    	// (The default ASP.NET time-out is 90 seconds.)
    	System.Threading.Thread.Sleep(1000*100);
    }
    
  3. Microsoft Visual C# ile Web uygulaması oluşturun. Bunu yapmak için şu adımları izleyin:
    1. Microsoft Visual Studio .NET'i başlatın.
    2. Dosya menüsünde Yeni ' nin üzerine gelin ve sonra Project ' i tıklatın.
    3. Yeni proje) iletişim kutusunda, Project Types altında Visual C# Projects ' ı tıklatın ve sonra şablonları altında ASP.NET Web uygulaması ' ı tıklatın.
    4. Konum kutusunda http://localhost/TestWeb1 yazın.
    5. Projeyi oluşturmak için Tamam ' ı tıklatın. Projenize WebForm1.aspx eklenecektir.
  4. Solution Explorer'da (Çözüm Gezgini), TestWeb1 sağ tıklatın ve sonra Add Reference</a1>'ı tıklatın.
  5. Başvuru Ekle iletişim kutusunda, Gözat ' ı tıklatın.
  6. ServicedComponent içeren DLL Bileşeni Seç iletişim kutusunda seçin-türetilmiş sınıf 1. adımda oluşturulan.
  7. Solution Explorer'da (Çözüm Gezgini), WebForm1.aspx dosyasını sağ tıklatın ve Kod Görüntüle</a1>'ı tıklatın.
  8. Aşağıdaki kod örneği Page_Load olayı procedure.
    // Create an instance of the ServicedComponent-derived class.
    // Note: Change the namespace and the class name as appropriate.
    MyNamespace.MyServicedComponent sc = new MyNamespace.MyServicedComponent();
    
    // Call any method on this object to cause the Activate method to occur.
    sc.DoTrans();
    
  9. Http://localhost/TestWeb1/WebForm1.aspx sayfayı sınamak için bir yük sınaması yardımcı programını kullanın. Örneğin, aşağıdaki Microsoft Bilgi Bankası makalesinde listelenen adımları izleyin:
    815161  (http://support.microsoft.com/kb/815161/ ) ASP.NET, Web Application Stress Tool ile) yanıt verme yeteneğini ölçer nasıl kullanılır

Bu makaledeki bilginin uygulandığı durum:
  • Microsoft COM+ 1.5
  • Microsoft ASP.NET 1.0
  • Microsoft ASP.NET 1.1
  • Microsoft ASP.NET 2.0
Anahtar Kelimeler: 
kbmt kbtshoot kbbug kbprb KB917069 KbMttr
Otomatik TercümeOtomatik Tercüme
ÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir.
Makalenin İngilizcesi aşağıdaki gibidir:917069  (http://support.microsoft.com/kb/917069/en-us/ )