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

Düzeltme: Genel arabirim tablosu (GIT) kullanan BIR COM + uygulama kilitlenmeye

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ı.
Önemli Bu makale, kayıt defterini düzenlemeyle ilgili bilgi içerir. Kayıt defterini değiştirmeden önce yedeklemeyi unutmayın. Bir sorun çıkması durumunda kayıt defterini nasıl geri yükleyeceğinizi bildiğinizden emin olun. Kayıt defterini yedekleme, geri yükleme ve değiştirme hakkında daha fazla bilgi için Microsoft Bilgi Bankası'ndaki makaleyi görüntülemek üzere aşağıdaki makaleyi inceleyin:
256986  (http://support.microsoft.com/kb/256986/ ) Microsoft Windows Kayıt Defteri'nin Açıklaması
Hepsini aç | Hepsini kapa

Belirtiler

Bir COM + işlemi yanıt vermiyor (askıda) görünebilir. Bu özel sayısındaki Sık ' dir. Uygulamayı tamamen sorunu tanılamak için hata ayıklama gerekir. Bu sorunla karşılaşırsanız, birden çok iş parçacığı işleme gösteride Genel arabirim tablosu (GIT) erişim gerektiren bir yığın arayın.

Bu sorun yaşamaya GIT kodunuzda açıkça erişmek zorunda değildir. Kullandığınız başka bir bileşen GIT erişebilirler.

Neden

Bu sorun aşağıdaki durumlardan biri doğruysa oluşabilir:
  • COM + eşzamanlı etkinlikler ve JScript kullandığınız bileşenleri.
  • JScript açıkça kullanın. Windows, kullandığınız COM + uygulamasındaki komut dosyası bileşenleri (WSC).
  • JScript dolaylı olarak kullanın. Örneğin, Microsoft XML (MSXML) Çözümleyici, bir XSL dönüşümü gerçekleştirmeye JScript kullanır.
  • Visual C# veya Visual Basic .NET yönetilen kod kullanılarak yazılan COM + bileşenleri kullanarak. Ayrıca, açıkça atma yöntemi Microsoft Windows Server 2003'ten önceki Microsoft Windows sürümlerinde bu nesnelerde çağırmayın.

Çözüm

Not
  • Microsoft .NET System.EnterpriseServices.ServicedComponent nesneleri kullanan COM + uygulamaları yönetilen COM + uygulamaları da verilir.
  • Microsoft .NET System.EnterpriseServices.ServicedComponent nesneleri kullanan COM + uygulamaları yönetilmeyen COM + uygulamaları da verilir.
Bu sorunla, Microsoft .NET System.EnterpriseServices.ServicedComponent nesneleri kullanan COM + uygulamalarında istemci kodu her ServicedComponent örneğinde atma yöntemini ça??r?r emin olun. Deterministic temizleme etkinleştirmek için istemci ServicedComponent nesnelerin atma yöntemle sistematik kullanımı doğru yaklaşımdır. Tüm istemci uygulamaları, atmaServicedComponent hepsinin, hatta yönetilmeyen yöntem COM istemci uygulamaları için gereklidir.

Bu sorun, Microsoft .NET System.EnterpriseServices.ServicedComponent nesneleri kullanan COM + uygulamaları karşılaşırsanız, sorunu gidermek için GipActivityBypass adlı bir kayıt defteri değerini kullanabilirsiniz. Microsoft Windows 2000'de bu kayıt defteri değerini kullanmak için <a0></a0>, ya Windows 2000 Service Pack 3'ü yüklemek veya vermelisiniz 18.1 Microsoft COM + düzeltme toplaması toplu edinin.

Daha fazla bilgi için, Microsoft Bilgi Bankası'ndaki makaleyi görüntülemek üzere aşağıdaki makale numarasını tıklatın:
313582  (http://support.microsoft.com/kb/313582/ ) Windows 2000 Service Pack 2 Sonrası COM + toplu düzeltme paketi 18.1 toplu
Bu sorunu gidermek için, en son Windows 2000 hizmet paketini edinin. Daha fazla bilgi için, Microsoft Bilgi Bankası'ndaki makaleyi görüntülemek üzere aşağıdaki makale numarasını tıklatın:
260910  (http://support.microsoft.com/kb/260910/ ) En son Windows 2000 hizmet paketi nasıl elde edilir
Uyarı Kayıt Defteri Düzenleyicisi'ni veya başka bir yöntemi kullanarak kayıt defterini hatalı olarak değiştirirseniz önemli sorunlar oluşabilir. Bu sorunlar, işletim sisteminizi yeniden yüklemenizi gerektirebilir. Microsoft bu sorunların çözülebileceğini garanti etmemektedir. Kayıt defterini kendi sorumluluğunuzda değiştiriniz.

Windows 2000 veya Windows XP'deki düzeltmeyi etkinleştirmek için <a0></a0>, bu ek kayıt defteri değerini oluşturmalısınız:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\COM3\GipActivityBypass
Bunu yapmak için şu adımları izleyin:
  1. Kayıt Defteri Düzenleyicisi'ni başlatın.
  2. Kayıt defterinde, aşağıdaki anahtarı bulun ve tıklatın:
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\COM3
  3. Düzen menüsünden Yeni ' nin üzerine gidin ve DWORD değeri ' ni tıklatın.
  4. GipActivityBypass yazın ve ENTER tuşuna basın.
  5. Düzen menüsünden Değiştir ' i tıklatın.
  6. 1 Yazın ve Tamam ' ı tıklatın.
Bu kayıt defteri değeri yoksa, varsayılan değer sıfır (yanlış) ' dir. Bu nedenle, GIT kodu, COM + faaliyet girmek için beklemeniz gerekir. Bu davranış, bir kilitlenme durumu neden olabilir. Gösterildiği BIR sıfır olmayan değer (true), yeni davranışı sağlar ve sonra kilitlenme durumu önler.

Not Bu kayıt defteri değeri GetInterfaceFromGlobal yöntem çağrıları aktivite kilidi geçmesine olanak tanır. Yönetilmeyen bir COM +, uygulama deneyimleri kilitlenmeleri RevokeInterfaceFromGlobal yöntemi veya RegisterInterfaceInGlobal yöntemini çağırdığında, Microsoft Destek'e başvurun.

Pratik Çözüm

Yönetilen COM + uygulamalarında bu sorunla karşılaşırsanız, geçici bir çözüm olarak aşağıdaki Microsoft Bilgi Bankası makalesinde açıklanan düzeltmeyi uygulayabilirsiniz:
875503  (http://support.microsoft.com/kb/875503/ ) Düzeltme: uygulamalar üzerinde .NET Framework <a1>ServicedComponent</a1> sınıfının tüm örneklerini Dispose yöntemini çağırmayın yavaş performans, kilitlenme ve bellek sızıntısı oluşabilir
Alternatif olarak, geçici bir çözüm olarak DisableAsyncFinalization adlı bir kayıt defteri değeri de kullanabilirsiniz.

Not "Çözüm" bölümünde açıklanan çözümü uygulayan sırada, yalnızca DisableAsyncFinalization kayıt defteri değerini geçici bir çözüm kullanın. Üzerinde DisableAsyncFinalization kayıt defteri değeri kullanır ve atma yöntemini kullanmak, daha yüksek bellek kullanımı, düşürülmüş performans ve uygulamanın olası hata karşılaşacaklardır.

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\COM3\System.EnterpriseServices\DisableAsyncFinalization
oluşturmak için kayıt defteri, Windows XP'de değeri veya Windows 2000'de, aşağıdaki adımları izleyin:
  1. Kayıt Defteri Düzenleyicisi'ni başlatın.
  2. Kayıt defterinde, aşağıdaki anahtarı bulun ve tıklatın:
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\COM3\System.EnterpriseServices
    NotCOM3
    System.EnterpriseServices
    </a1> anahtarında bulamazsanız kayıt defteri anahtarını oluşturun. Bunu yapmak için şu adımları izleyin:
    1. Düzen menüsünden Yeni ' nin üzerine gelin ve anahtar ' ı tıklatın.
    2. System.EnterpriseServices'ı yazın ve ENTER tuşuna basın.
  3. Düzen menüsünden Yeni ' nin üzerine gidin ve DWORD değeri ' ni tıklatın.
  4. DisableAsyncFinalization yazın ve ENTER tuşuna basın.
  5. Düzen menüsünden Değiştir ' i tıklatın.
  6. 1 <a2>Değer verisi</a2> kutusuna yazın ve Tamam ' ı tıklatın.

Durum

Microsoft, "Geçerli Olduğu Ürünler" bölümünde listelenen Microsoft ürünlerinde bu sorunun olduğunu onaylamıştır. Bu sorun ilk olarak Microsoft 2000 Service Pack 3'te düzeltilmiştir.

Daha fazla bilgi

Aşağıdaki örnekte, çağrı yığını bir JScript gösterir çöp toplayıcısını, Genel arabirim tablosundan bir arabirim almaya çalışır. <a1>Not</a1> içeren çerçeveyi ole32! CGIPTable::GetInterfaceFromGlobal.
02c3c2d0 77e8366e 00000002 02c3c2f8 00000001 ntdll!_ZwWaitForMultipleObjects@20+0xb
02c3c320 77e260f8 02c3c2f8 00000001 00000000 KERNEL32!WaitForMultipleObjectsEx+0xea
02c3c37c 68fd46f5 02c3c348 06180fd0 ffffffff USER32!MsgWaitForMultipleObjectsEx+0x153
02c3c3a4 68fd5b64 06180fd0 00000001 02c3c404 ole32!CCliModalLoop::BlockFn+0xf8
02c3c408 695378bc 00079048 ffffffff 00000001 ole32!CoWaitForMultipleHandles+0xe1
02c3c464 69537544 06180fa0 00000001 02c3c758 COMSVCS!?EnterActivity@CActivity@@UAGJHPAUICall@@@Z+0x1be
02c3c474 68fd21f7 06180f90 02c3c758 02c3c7b8 COMSVCS!?Enter@CActivity@@UAGJPAUICall@@@Z+0x14
02c3c4ac 68fd1f78 00000020 00000002 00000001 ole32!CPolicySet::DeliverEvents+0x1f6
02c3c538 68fc8d8e 02c3c758 00000002 02c3c7b8 ole32!CPolicySet::Notify+0x455
02c3c788 68fc8b18 02c3c878 1267104c 68fd9d69 ole32!EnterForCallback+0xe7
02c3c8a8 68fc89f3 1267104c 68fd9d69 0000f024 ole32!SwitchForCallback+0xfb
02c3c8d8 68fcf3fc 1267104c 68fd9d69 0000f024 ole32!PerformCallback+0x70
02c3c934 68fd9eab 00a31e68 68fd9d69 0000f024 ole32!CObjectContext::InternalContextCallback+0x10c
02c3c97c 6b745897 6909a990 0000f024 6b76f888 ole32!CGIPTable::GetInterfaceFromGlobal+0xc1
02c3c9a0 6b7456a0 00000000 00000002 0a5abfb0 jscript!GcContext::CallInContext+0x20
02c3c9c4 6b704f1a 00000002 00000194 0a5ff530 jscript!GcContext::Reclaim+0xba
02c3c9dc 6b729eb8 0a608d88 0a62c008 6b729cae jscript!GcContext::Collect+0xbe
02c3c9e8 6b729cae 77e8357b 0a5ff648 6b72a08e jscript!GcContext::ExhaustiveCollect+0x1a
02c3ca08 6b7329bf 0a5ff530 00000001 0a608d88 jscript!CSession::Close+0x12c
02c3ca18 682fb8f4 0a5ff530 00000000 0a608d88 jscript!COleScript::SetScriptState+0x105
02c3ca28 682fb6b8 0a5cfed8 682fea19 02c3ccac scrobj!ScriptEngine::Close+0x14
02c3ca30 682fea19 02c3ccac 0a5cfed4 00000000 scrobj!ScriptEngine::~ScriptEngine+0x8
02c3ca44 682fe778 127b0fa0 02c3d4ac 00400000 scrobj!ComScriptlet::Inner::~Inner+0x79
02c3ca54 6830562d 0a5cfed0 7c0183c2 0a5e38b0 scrobj!ComScriptlet::Release+0x28
02c3ca5c 7c0183c2 0a5e38b0 68fc8db8 042dfe7c scrobj!ComDexHandler::Inner::Release+0xd
02c3ca64 68fc8db8 042dfe7c 00a30ef4 10b5140c msjava!RemoteReleaseCallback+0xd
02c3ccac 68fc8bb9 02c3cd9c 10b5140c 7c0183b5 ole32!EnterForCallback+0x111
02c3cdcc 68fec807 00079048 7c0183b5 042dfe7c ole32!SwitchForCallback+0x19c
02c3ce00 77d445e0 02c70ff8 00000000 02020202 ole32!CRemoteUnknown::DoCallback+0x72
					
Microsoft Windows XP üzerinde çalışan bir Microsoft Enterprise Services bileşenini aşağıdaki çağrı yığını gösterir. <a1>Not</a1> içeren çerçeveyi ole32! CGIPTable::RevokeInterfaceFromGlobal.
036ded74 77f7f49f 77e74bd8 00000001 036dedc0 SharedUserData!SystemCallStub+0x4
036ded78 77e74bd8 00000001 036dedc0 00000001 ntdll!NtWaitForMultipleObjects+0xc
036dee14 77237ce4 00000001 042dd7dc 00000000 kernel32!WaitForMultipleObjectsEx+0x12c
036dee84 7575eb1d 00000000 ffffffff 00000001 ole32!CoWaitForMultipleHandles+0xe0
036deee0 7575e963 042dd790 00000001 036defb8 comsvcs!CActivity::EnterActivity+0x194
036deef0 77237287 042dd780 036defb8 036df070 comsvcs!CActivity::Enter+0x13
036def20 771d9c46 00000020 00000002 036df070 ole32!CPolicySet::DeliverEvents+0x1b4
036def98 77253c5a 036defb8 00000002 036df070 ole32!CPolicySet::Notify+0x31d 
036defec 772543c7 00000000 042bede8 771cb6cd ole32!EnterForCallback+0xb3
036df144 77236722 036df024 771cb6cd 036df19c ole32!SwitchForCallback+0x19a
036df170 7722a047 042bede8 771cb6cd 036df19c ole32!PerformCallback+0x52
036df1a4 77201a4b 04284894 00000000 00090ec0 ole32!ReleaseMarshalObjRef+0x76
036df210 77237f23 036df228 000fefa0 00001b0c ole32!CoReleaseMarshalData+0x7b
036df24c 0377e50d 772b4618 00001b0c 032d2100 ole32!CGIPTable::RevokeInterfaceFromGlobal+0x1a1
036df294 03100971 0106281c 03103cea 032d2100 0x377e50d
036df2d4 79a87bfd 799b0983 036df300 000fefa0 0x3100971
036df2ec 7930a2a8 799b0908 0106281c 00000000 mscorlib_79960000+0x127bfd
036df318 792ad177 799b0908 0106281c 00000000 mscorwks!CTPMethodTable::CallTarget+0x4b
036df338 791b21e7 031f341c 00000000 00000000 mscorwks!CRemotingServices::CreateProxyOrObject+0x57
036df3a4 791b22a1 031f341c 03103c3f 00000002 mscorwks!JIT_NewCrossContextHelper+0x3b
					
Hata ayıklama araçları'nı kullanırken, simgesel bilgi elde etme hakkında daha fazla bilgi için aşağıdaki Microsoft Web sitesini ziyaret edin:
http://www.microsoft.com/whdc/devtools/debugging/debugstart.mspx (http://www.microsoft.com/whdc/devtools/debugging/debugstart.mspx)
Windows 2000'i ve Windows 2000 düzeltmelerini aynı anda yükleme hakkında daha fazla bilgi için, Microsoft Bilgi Bankası'ndaki makaleyi görüntülemek üzere aşağıdaki makale numarasını tıklatın:
249149  (http://support.microsoft.com/kb/249149/ ) Microsoft Windows 2000 ve Windows 2000 Düzeltmelerini Yükleme
Yazılım güncelleştirme terminolojisi hakkında daha fazla bilgi için, Microsoft Bilgi Bankası'ndaki makaleyi görüntülemek üzere aşağıdaki makale numarasını tıklatın:
824684  (http://support.microsoft.com/kb/824684/ ) Microsoft yazılım güncelleştirmelerini açıklamak için kullanılan standart terminolojinin açıklaması

Bu makaledeki bilginin uygulandığı durum:
  • Microsoft COM+ 1.0, Ne zaman ne ile kullanilir:
    • Microsoft Windows 2000 Professional SP1
    • Microsoft Windows 2000 Server SP1
    • Microsoft Windows 2000 Advanced Server SP1
    • Microsoft Windows 2000 Professional SP2
    • Microsoft Windows 2000 Server SP2
    • Microsoft Windows 2000 Advanced Server SP2
    • Microsoft Windows XP Home Edition
    • Microsoft Windows XP Professional Edition
  • Microsoft COM+ 1.5, Ne zaman ne ile kullanilir:
    • Microsoft Windows 2000 Professional SP1
    • Microsoft Windows 2000 Server SP1
    • Microsoft Windows 2000 Advanced Server SP1
    • Microsoft Windows 2000 Professional SP2
    • Microsoft Windows 2000 Server SP2
    • Microsoft Windows 2000 Advanced Server SP2
    • Microsoft Windows XP Home Edition
    • Microsoft Windows XP Professional Edition
Anahtar Kelimeler: 
kbmt kbbug kbfix kbqfe kbwin2000presp3fix kbwin2000sp3fix KB298014 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:298014  (http://support.microsoft.com/kb/298014/en-us/ )