Makale numarası: 198891 - Son Gözden Geçirme: 22 Şubat 2007 Perşembe - Gözden geçirme: 9.3

Nasıl yapılır: SQL Sunucu işleminin dışında bir DLL tabanlı COM nesnesi çalıştırmak

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

Özet

Microsoft SQL Server 6.5 veya daha sonraki bir sürümünü yükleyin ve özel bir Bileşen Nesne Modeli (COM) nesneleri kümesi OLE Otomasyonu içinde çalıştırma yeteneği, saklı yordamları veya aracılığıyla saklı yordamlar genişletilmiş sağlar. Varsayılan olarak, DLL tabanlı COM nesneleri gibi COM nesneleri yalnızca SQL Server işleminin bellek adres alanlarında yüklenmez, ancak aynı zamanda tam erişim bu bellek adres alanına sahip oldukları anlamına gelir işlem sunucusu yüklenir. Bu nedenle, SQL Server işlem alanında yüklü olan bir COM nesnesi, herhangi bir DLL dosyası olarak aynı kurallarına uygun olmalıdır. Bellek içinde zayıflatır SQL Sunucu işleminin veya sızıntısı kaynaklarını, bir COM nesnesi üzerine yazabilirsiniz bir olasılığı vardır.

Bir COM nesnesi SQL Server işleminin sağlamlık etkileyen bir bakışta varsa, SQL Server işlem alanı dışındaki COM nesne örneğini oluşturmak için bu makaledeki adımları kullanmak isteyebilirsiniz. Uygulama Dağıtılmış Bileşen Nesne modeli kullanıcının (DCOM), DLL tabanlı COM nesnesi, SQL Server işlem alanı dışında çalıştırma yeteneği "Konum saydamlık" tayini işletim sistemine sağladı.

Bir DLL tabanlı COM nesnesi, ana uygulama adres alanının dışında çalışan işlemi, uzak olarak adlandırılır. Uzak, başka bir yürütülebilir dosya, SQL Server yürütülebilir dosyası yerine bir yedek işlem olmasını gerektirir. DCOM Hizmet Denetim Yöneticisi (Rpcss.exe) tarafından kullanılan varsayılan yürütülebilir Dllhost.exe olarak adlandırılır. DCOM desteği yapısı, işlem alanına DLL yüklenemedi, Dllhost.exe dosyası kullanır ve saydam olarak SQL Server bu durumda, istemciye, istenen arabirim sıralamakta proxy/saplama çiftleri kullanır. Bu yürütülebilir dosya aynı anda birden çok arabirim/yöntem istekleri kabul edebilir. Arabirim kullanımı tamamlandıktan sonra DCOM Hizmet Denetim Yöneticisi (SCM) temiz yukarı ve Dllhost.exe dosyası kaldırılıyor yönetir. COM nesneleri örneklemesi arasında durum bilgilerini saklamak için beklenmelidir değil.

Kullanılabilmesi için düzgün çalışabilmesi, bu makalede, sistem bir DCOM etkin işletim sistemi çalıştırması gerekir. DCOM yüklenmiş eklenti ile bu Windows NT 4.0 Service Pack 2 veya sonraki sürümleri, Microsoft Windows 98 veya Microsoft Windows 95 olacaktır. Olup olmadığını, bunun sp_OACreate veya genişletilmiş bir depolanmış yordamı örneği SQL Server işlem alanında oluşturulan herhangi bir DLL tabanlı COM nesnesi için aşağıdaki adımları uygulayabilirsiniz.

Daha fazla bilgi

Işlem, COM nesne örneğini oluşturmak için kullanabileceğiniz iki temel yöntemi hakkında bilgi izler.

COM nesnesinin istemci istekleri uzak

COM nesnesi Çağır değiştirerek, nesneyi SQL Server adres alanı dışında oluşturulmasını isteyebilir.
  • Varsayılan olarak COM nesnesi sp_OACreate yordamını kullanarak yükledi, işlem sırasında yüklenir. Ancak, yok isteğe bağlı bir üçüncü parametre bu yordamın bağlamında nesne oluşturulacağı yeri belirtmek için kullanabileceğiniz bu olabilir. Bu parametre belirtilmezse, varsayılan ayar olan beş (5), kullanılan nesne içinde veya dışında işlemin çalışmak üzere olduğu anlamına gelir. Parametreyi değiştirmek gereksinim duyduğunuz dört (4 gösterir), bu bileşen yerel bir yürütülebilir dosyayı çalıştırmak üzere, DCOM'u. Açıkça ","işlem COM nesnesi çalıştırmak için DCOM bildirmek için aşağıdaki örneğe benzer bir sözdizimi kullanın sp_OACreate kullanarak saklı yordamını:
       DECLARE @object int
       DECLARE @hr int
       EXEC @hr = sp_OACreate 'SQLOLE.SQLServer', @object OUT, 4
    						
  • COM nesnesi içinde oluşturulmuş bir genişletilmiş üçüncü parametre, Cocreateınstance saklı yordamını veya CoCreateInstanceEx CLSCTX_LOCAL_SERVER için değiştirilebilir. Cocreateınstance kullanarak aşağıdaki kod örneğinde gösterilen:
       HRESULT hr = CoCreateInstance(CLSID_Test, NULL, CLSCTX_LOCAL_SERVER,
         IID_IUnknown, (void**)&piunknown);
    						

Uzak hizmet nesnesinin zorlamak için kayıt defterini

Nesne, işlem dışı oluşturulmasını istemek için COM istemcisi değiştirilemiyor, işlem dışı oluşturulacak nesnenin zorlamak için iki farklı yöntem yok.
  • Microsoft Visual C++ ile birlikte gelir ve altındaki Tüm nesneleri OLEComponent.Object biçiminde Progıd bulun OLE/COM nesnesi görüntüleyiciyi (Oleview.exe) kullanın. COM nesnesi seçin ve sonra da nesne menüsünden Cocreateınstance Flags seçin. Yalnızca CLSCTX_LOCAL_SERVER seçili olduğundan emin olun. Sonra Uygulama ve Inproc sunucu altındaki sekmeleri Yedek işlem kullan'ı seçin ve "yolu için özel yedek" alanını boş bırakın Dllhost.exe dosyasının yüklenmesine olanak veren ve COM DLL sıra içinde duruma işlem.

    Microsoft Visual C++ yoksa OLE/COM nesnesi Görüntüleyicisi yardımcı programını ayrıca aşağıdaki Microsoft Web sitesinden yüklenebilir:
    http://www.microsoft.com/downloads/details.aspx?familyid=5233b70d-d9b2-4cb5-aeb6-45664be858b6&displaylang=en (http://www.microsoft.com/downloads/details.aspx?familyid=5233b70d-d9b2-4cb5-aeb6-45664be858b6&displaylang=en)
  • Kayıt defterini el ile olarak güncelleştirmek için aşağıdaki adımları kullanın.

    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.
    1. COM nesnesinin sınıf tanımlayıcısı (CLSID) edinin. Clsıd DEĞERINI 128 bitlik bir sayıdır ve bu bileşen, modül veya bu COM nesnesi içeren bir dosyayı benzersiz olarak tanımlamakta kullanılan bir genel benzersiz tanıtıcı (GUID) kabul. Saklı yordamları OLE Otomasyon kullanarak COM nesneleri oluşturan ilk parametresi depolanmış yordamın programsal bir tanımlayıcıdır veya Progıd <a0>OLE</a0> nesnesinin CLSID türetmek için kullanılır. Bu karakter dizesi OLE nesnesinin sınıf açıklanır ve aşağıdaki biçime sahiptir:
            OLEComponent.Object
      								
      programsal tanıtıcısı bir COM nesnesi için sınıf tanımlayıcısını bulmak için kullanabilirsiniz.

      Kayıt defteri düzenleyicisini (Regedit.exe) açın ve HKEY_CLASSES_ROOT anahtarının altında bir anahtarla sizin <OLEComponent.Object> adını bulmak için Bul yöntemini kullanın.. Diğer düzeylerde bulabilirsiniz, ancak bunu doğrudan HKEY_CLASSES_ROOT altında düzeyinde bulunması. Anahtarı bulduktan sonra anahtar adı için klasörünü genişletin ve CLSID adlı bir alt anahtar görmelisiniz. Bu klasörün içinde anahtar değerlerini görmek için Ek Yardım düğmesini tıklatın. Ekranın sağ tarafında bir başlık "(varsayılan)" adı verilir. Bu anahtarın verileri şu biçimde olmalıdır:
            {59F929A0-74D8-11D2-8CBC-08005A390B09}
      								
      için Not Defteri'ni kopyalayın ya da bu değeri not alın. Köşeli ayraçlar ekleyin.
    2. HKEY_CLASSES_ROOT\CLSID anahtarında gidin ve bu GUID numarasıyla alt anahtarı bulun. HKEY_CLASSES_ROOT\CLSID anahtarını vurgulayın, sonra Bul işlevi, Kayıt Defteri Düzenleyicisi'nde (Düzen menüsü altında) kullanır ve GUID, Bul iletişim kutusuna yapıştırın. COM DLL dosyasının konumuna işaret bu anahtarın altındaki ınprocserver32 alt inceleyerek doğru arabirim buldunuz emin olun. TypeLib anahtar varsa, bu GUID değerini denetleyin. Bu, ne 1. adımda not ettiğiniz değerinden farklı olmalıdır. Aksi halde, TypeLib GUID ve COM nesnesinin GUID değil var. Progıd alt 'OLEComponent.Object.1' değerine sahip olacaktır. Bir ucundaki bu için yalnızca örnektir ve sürüm oluşturma bilgileri için kullanılır.
    3. Alt GUıD'ın ınprocserver32 anahtarının altında çalışırken, ThreadingModel değeri vardır ve her iki both ayarlamak veya dizme emin olmak için ücretsiz olarak, COM nesnesi, SQL Server işlem alanınız COM yürütülmesini etkinleştirmek için iş parçacığı modeli anladığı durumda olduğundan emin olun. ThreadingModel değeri değil veya grup için ayarlanmış, COM Nesne örnekleme tutarlı olmayabilir.

      Not Değer emin ThreadingModel eklerseniz, bir COM nesnesi uygulamadan önce sınayın.
    4. GUID numarasını/alt HKEY_CLASSES_ROOT\CLSID</a0> anahtarının altında vurgulayın. Düzen menüsünden Yeni ' yi tıklatın ve sonra Dize değeri seçin. Ad sütunu altında aşağıdaki komutu yazın:
      Appıd
    5. ENTER tuşuna basın ve sonra değeri olarak 1. adımdaki sınıf tanımlayıcı veya GUID numarasını not ettiğiniz ekleyin. GUID, aşağıdaki örnekte olduğu gibi kaşlı ayraçlar içinde olması gerekir:
       
            {59F929A0-74D8-11D2-8CBC-08005A390B09} 
      
      								
      uygulamanın Appıd tanımlayıcı DCOM tarafından DLL yürütülebilir bir dosya ile ilişkilendirmek için kullanılır.
    6. HKEY_CLASSES_ROOT\AppID altında yeni bir alt anahtar ekleyin ve bu bilgisayarın adı aynı sınıf tanımlayıcı veya GUID numarasını önceki adımda eklediğiniz gibi bir ayraç olarak ayarlayın.
    7. GUID adı vurgulayın. Düzen menüsünden Yeni ' yi tıklatın ve sonra Dize değeri seçin. Ad sütunu altında aşağıdaki komutu yazın:
      DllSurrogate
      Veri sütununun, bu değer için boş bırakın. Veri sütununun bu DCOM bildirir varsayılan yürütülebilir dosyayı çalıştırmak için boş olduğu için alan işlem, Dllhost.exe ve <a1>Yükle</a1> içinde kendi COM nesnesi.
    8. Kayıt Defteri Düzenleyicisi'ni kapatın. Başlat ' ı tıklatın ve sonra da <a2>Çalıştır</a2>'ı tıklatın. Çalıştır iletişim kutusunda, aşağıdakileri yazın:
      DCOMCNFG
      <a0>Dağıtılmış COM Yapılandırması Özellikleri</a0> iletişim kutusunu açmak için ENTER tuşuna basın. Varsayılan Özellikler sekmesini tıklatın ve Bu bilgisayarda dağıtılmış COM'U etkinleştir seçili olduğundan emin olun. Yüklü değilse, seçin ve sonra Uygula ' yı tıklatın.
    9. Microsoft Windows NT kullanıcı hesabı altında çalışan SQL Server bu nesne için kayıt defteri anahtarlarının "Tam Denetim" iznine sahip olduğundan emin olun. COM nesnesi oluşturulurken izinleri yeterli değil veya kayıt defteri anahtarları hatalı olarak giriş komutu aşağıdaki hataları oluşabilir:
      OLE Otomasyonu hata bilgileri
      hresult: 0X80040154
      Kaynak: Yordam genişletilmiş ODSOLE
      Açıklama: Sınıf kayıtlı değil

      OLE Otomasyonu hata bilgileri
      hresult: 0X80070005
      Kaynak: Yordam genişletilmiş ODSOLE
      Açıklama: Erişim engellendi.

      OLE Otomasyonu hata bilgileri
      hresult: 0X80080005
      Kaynak: Yordam genişletilmiş ODSOLE
      Açıklama: sunucu yürütme işlemi başarısız oldu
    10. Sınama ve bu Dllhost.exe dosyası çalıştırma ve COM nesnesi, <a0>işlem</a0> alanında yükleniyor, bakın. Bu, Microsoft Windows NT Resource Kit'in bir SQL Server'ın çalıştığı bir Windows NT bilgisayarda olduğunu gerektirir. Komut istemini açın ve tüm işlemler ve bunların ilişkili işlem tanımlayıcıları veya işlem tanımlayıcılarını (Pıd) gösteren Tlist.exe dosyası, komut isteminden çalıştırın. Transact-SQL komut dosyasında sp_OACreate çalıştırın ve bu çağrı yürütüldükten sonra ancak komut dosyası sonlandırılmadan önce ek bir 20 saniye için komut dosyası tamamlama geciktirmek için aşağıdakileri kullanın:
      WAITFOR DELAY '000:00:20'
      								
      komut dosyasını çalıştırın ve komut istemine gidin ve hemen Tlist.exe dosyas?n? çal??t?r?n. PID Dllhost.exe unutmayın. Tlist.exe'nı yeniden çalıştırın ve PID parametre olarak geçirmek. Bu, Dllhost.exe işlemini alanlarında yüklenen DLL'leri gösterir. DLL tabanlı COM nesnesi, bu işlemde çalışan olarak listelenmelidir. Sonra komut dosyası döndürür, Tlist.exe'nı yeniden çalıştırmayı Dllhost.exe) işlemi artık çalışmadığı gösterir.

      Aşağıdaki örnek çıkış, SQL Server işlem alanı dışında ADODB.Connection nesnesi oluşturulur. COM nesnesi Dllhost.exe işlem alanında varolan sırada Tlist.exe kullanarak bu anlık görüntü gerçekleştirildi. COM nesnesi içeren modül olan Msado15.dll modülünün yüklenen dikkat edin.
      C:\>tlist dllhost
       275 dllhost.exe
         CWD:     C:\NT40\system32\ 
         CmdLine: C:\NT40\System32\dllhost.exe {00000514-0000-0010-8000-00AA006D2EA4}
      -Embedding
         VirtualSize:    19180 KB   PeakVirtualSize:    19180 KB
         WorkingSetSize:  1780 KB   PeakWorkingSetSize:  1780 KB
         NumberOfThreads: 3
          278 Win32StartAddr:0x01001920 LastErr:0x00000000 State:Waiting
          215 Win32StartAddr:0x00001b5e LastErr:0x00000000 State:Waiting
          253 Win32StartAddr:0x00001b60 LastErr:0x000000cb State:Waiting
         4.0.1381.105 shp  0x01000000  dllhost.exe
         4.0.1381.130 shp  0x77f60000  ntdll.dll
         4.0.1381.121 shp  0x77dc0000  ADVAPI32.dll
         4.0.1381.133 shp  0x77f00000  KERNEL32.dll
         4.0.1381.133 shp  0x77e70000  USER32.dll
         4.0.1381.115 shp  0x77ed0000  GDI32.dll
         4.0.1381.131 shp  0x77e10000  RPCRT4.dll
         4.0.1381.117 shp  0x77b20000  ole32.dll
           6.0.8267.0 shp  0x78000000  MSVCRT.dll
                           0x1f310000  msado15.dll
          2.30.4265.1 shp  0x766f0000  OLEAUT32.dll
          4.0.1381.72 shp  0x77bf0000  rpcltc1.dll
      								
      Ile SQL Server sürüm 7.0 Desktop Edition, Microsoft Windows 95 veya Microsoft Windows 98 iş istasyonları üzerinde çalışan DLLHOST.exe dosyası ve bir COM nesnesi bu sınama sırasında DLL loading\unloading görmek için yürütme sırasında "32-bit modülleri Loaded" içinde bir uygulama Microsoft Sistem Bilgisi aracı kullanılabilir. Aracı erişmek için <a0></a0>, Başlat ' ı tıklatın, Programlar ' ın üzerine gidin, Donatılar ' ın üzerine gelin ve sonra da Sistem Araçları ' nı tıklatın.
Not Güvenlik sınırlamaları nedeniyle, Windows 95 veya Windows 98 DLLSurrogate işlem başlatma ve bir uzak istemci tarafından bir COM DLL yükleniyor desteklemiyor. Bu nedenle, COM Nesne çalışan nesne tablo'içinde (ROT) var ve çalışan yüklü/bir uzak istemci bilgisayar tarafından kullanılabilmesi için ise gerekir. SQL Server'de tutarsızlığa neden olmasını şüphelenildi, COM nesneleri izole etmenize yardımcı olmak için bu makaledeki adımları kullanın. Her bileşen iyice tutarlı davranışı sağlamak için işlem dışı çalışan sınanır emin olun. SQL Sunucu işlemi ve işlem dışında bir COM nesnesinin örneğini oluşturmasını, performansı fark değişir. Ayrıca, bazı COM nesneleri, uzak olarak oluşturulan değil ve kaynakları sızdırıyor. Bu makaledeki adımları uygulamadan bir sorun giderme adımı dışındaki bir şey için önce kapsamlı biçimde sınayın. Aşağıdaki Microsoft Bilgi Bankası makalesi nasıl uzak bir COM nesnesi, bir kaynak sızıntısına neden olabilir, bir örnek vardır:
197426  (http://support.microsoft.com/kb/197426/ ) Düzeltme: ADO nesneleri işlemleri arasında geçirilmesi, tanıtıcı sızıntısı
Not Microsoft SQL 6.5 sürümünüzün SP5'e, varsayılan olarak, tek iş parçacığı grubu (STA) modeli ile birlikte çalışır ve COM nesnelerinin ayrı bir iç iş parçacığı başlatma gerçekleştirir. Bu modelde, bir iş parçacığının tüm OLE nesneleri SQL Server işlemi içinde ve bu COM nesnesine erişim gerektiren geri tüm istemci bağlantıları için proxy oluşturulmasını denetlemek için seçilir. Bu SQL Server tarafından dahili olarak işlendiğini çünkü nesnenin sürdürme arasında COM nesnesinin örneklemesi garanti edilemez.

Referanslar

SQL Server 6.5 COM Nesne modeli hakkında daha fazla bilgi için Microsoft Knowledge Base'deki makaleyi görüntülemek üzere aşağıdaki makale numarasını tıklatın:
194661  (http://support.microsoft.com/kb/194661/ ) SQL Server COM nesnesi kalıcı modeli
Biçimi hakkında daha fazla bilgi için Sp_OA saklı yordamını uygulanır, Microsoft Knowledge Base'deki makaleyi görüntülemek üzere aşağıdaki makale numarasını tıklatın:
180780  (http://support.microsoft.com/kb/180780/ ) Sp_OA yordamlar uzantısı SQL Server'a nasıl uygulanır
DLL yedeklerin; DLL tabanlı COM nesneleri çalıştırma hakkında daha fazla bilgi için aşağıdaki başvurun:

Eddon, Guy; Eddon Henry, <a1>Com</a1> (Mps) ınside dağıtılmış. Microsoft Press, 1998, (ISBN 1-57231-849-X), sekiz bölüm: ' DLL yedeklerin ve yürütülebilir bileşenleri

Kutusuna, tan Essential COM. Addison-Wesley ortak. Co., (ISBN 0-201-63446-5) altı bölüm: 'Uygulamaları' Grimes Richard, <a1>Professional</a1> DCOM programı. Wrox Press ınc. (ISBN 1-861000-60-X)'i, bölüm dört: 'Dağıtılmış COM' The DCOM eklenti Windows 95 için SQL Server 7.0 medyayla sevk ve dosyayı Dcom95.exe olarak adlandırılır. Dcom95.exe, aşağıdaki Web sitesinden yükleyebilirsiniz:
http://www.microsoft.com/com (http://www.microsoft.com/com)

Bu makaledeki bilginin uygulandığı durum:
  • Microsoft SQL Server 6.5 Standard Edition
  • Microsoft SQL Server 7.0 Standard Edition
  • Microsoft SQL Server 2000 Standard Edition
  • Microsoft SQL Server 2005 Standard Edition
  • Microsoft SQL Server 2005 Developer Edition
  • Microsoft SQL 2005 Server Enterprise
  • Microsoft SQL Server 2005 Express Edition
  • Microsoft SQL 2005 Server Workgroup
Anahtar Kelimeler: 
kbmt kbinfo KB198891 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:198891  (http://support.microsoft.com/kb/198891/en-us/ )