Aracılığıyla paylaş


Birlikte Çalışabilirlik Yönlendirmesi

Birlikte çalışma hazırlığı, çağrılar sırasında yöntem bağımsız değişkenlerinde verilerin nasıl geçirildiğini ve yönetilen ile yönetilmeyen bellek arasında değerlerin nasıl döndürüleceğini yönetir. Interop marshalling, ortak dil çalışma zamanının marshalling hizmeti tarafından gerçekleştirilen bir çalışma zamanı etkinliğidir.

Çoğu veri türünün hem yönetilen hem de yönetilmeyen bellekte ortak gösterimleri vardır. Interop marshaller bu işlemleri sizin için gerçekleştirir. Diğer türler belirsiz olabilir veya yönetilen bellekte hiç temsil edilmeyebilir.

Belirsiz bir tür, tek bir yönetilen türle eşlenen birden çok yönetilmeyen gösterime veya bir dizinin boyutu gibi eksik tür bilgilerine sahip olabilir. Belirsiz türler için, marshaller varsayılan bir temsil ve birden fazla temsilin bulunduğu durumlarda alternatif temsiller sağlar. Belirsiz bir türün nasıl işleneceği konusunda marshaller'a açık talimatlar verebilirsiniz.

Platform Çağırma ve COM Birlikte Çalışma Modelleri

Ortak dil çalışma zamanı, yönetilmeyen kodla birlikte çalışmak için iki mekanizma sağlar:

  • Yönetilen kodun yönetilmeyen bir kitaplıktan dışarı aktarılan işlevleri çağırmasını sağlayan platform çağrısı.
  • Yönetilen kodun, arabirimler aracılığıyla Bileşen Nesne Modeli (COM) nesneleriyle etkileşim kurmasını sağlayan COM birlikte çalışması.

Hem platform çağırma hem de COM birlikte çalışma, gerekirse yöntem bağımsız değişkenlerini çağıran ve çağıran ile geri arasında doğru bir şekilde taşımak için birlikte çalışma sıralamasını kullanır. Aşağıdaki çizimde gösterildiği gibi, platform çağırma yöntemine ait çağrı akışı yönetilen koddan yönetilmeyen koda doğru akar ve hiçbir zaman başka yöne gitmez, geri çağırma işlevleri dahil olduğu zamanlar dışında. Platform çağırma çağrıları yalnızca yönetilen koddan yönetilmeyen koda akabilse de, veriler giriş veya çıkış parametresi olarak her iki yönde de akabilir. COM uyumluluk yöntemi çağrıları her iki yönde de aktarılabilir.

Platform Tetikleme ve COM

En düşük düzeyde, her iki mekanizma da aynı birlikte çalışma marshalling hizmetini kullanır; ancak, bazı veri türleri yalnızca COM birlikte çalışma veya platform çağrısı tarafından desteklenir. Ayrıntılar için bkz Varsayılan Sıralama Davranışı.

Marshalling ve COM Apartments

Birlikte çalışma zamanlayıcısı, ortak dil çalışma zamanı yığını ile yönetilmeyen yığın arasında verileri sıralar. Çağıran ve çağırılan aynı veri örneği üzerinde çalışamadığında, veri düzenleme gerçekleşir. Birlikte çalışma yardımcısı, çağıran ve çalışan kendi veri kopyalarına sahip olsalar bile, aynı veriler üzerinde çalışıyor gibi görünmelerini sağlar.

COM ayrıca, COM ortamları veya farklı COM süreçleri arasında veri aktarımı yapan bir marshaller bulunmaktadır. Aynı COM alanı içinde yönetilen ve yönetilmeyen kodlar arasında çağrı yapılırken, iletişim ara birimi marshaller tek dahil olan marshaller'dır. Farklı bir COM apartment'ta veya farklı bir işlemde yönetilen kod ile yönetilmeyen kod arasında çağrı yapıldığında hem interop marshaller hem de COM marshaller yer alır.

COM İstemcileri ve Yönetilen Sunucular

Regasm.exe (Assembly Registration Tool) tarafından kaydedilen bir tür kitaplığına sahip dışa aktarılan yönetilen sunucunun ThreadingModel kayıt defteri girişi Both olarak ayarlanmıştır. Bu değer, sunucunun tek iş parçacıklı bir dairede (STA) veya çok iş parçacıklı bir dairede (MTA) etkinleştirilebileceğini gösterir. Sunucu nesnesi, aşağıdaki tabloda gösterildiği gibi çağıranla aynı dairede oluşturulur:

COM istemcisi .NET sunucusu Marshalling gereksinimleri
STA Both STA haline gelir. Aynı apartman içinde düzenleme.
MTA Both MTA'ya dönüşür. Aynı apartman içinde düzenleme.

İstemci ve sunucu aynı dairede olduğundan, interop marshalling hizmeti tüm veri yönlendirmesini otomatik olarak işler. Aşağıdaki görsel, aynı COM stilindeki daire içinde yönetilen ve yönetilmeyen yığınlar arasında işletilen marshalling birlikte çalışma hizmetini göstermektedir.

Yönetilen ve yönetilmeyen yığınlar arasında birlikte

Yönetilen bir sunucuyu dışarı aktarmayı planlıyorsanız, COM istemcisinin sunucunun dairesini belirlediğini unutmayın. MTA'da başlatılmış bir COM istemcisi tarafından çağrılan yönetimli sunucu, iş parçacığı güvenliğini sağlamalıdır.

Yönetilen İstemciler ve COM Sunucuları

Yönetilen istemci daireler için varsayılan ayar MTA'dır; ancak, .NET istemcisinin uygulama türü varsayılan ayarı değiştirebilir. Örneğin, Visual Basic istemci dairesi ayarı STA'dır. Yönetilen bir istemcinin daire ayarlarını incelemek ve değiştirmek için System.STAThreadAttribute, System.MTAThreadAttribute, Thread.ApartmentState veya Page.AspCompatMode özelliklerini kullanabilirsiniz.

Bileşenin yazarı, bir COM sunucusunun iş parçacığı bağlılığını ayarlar. Aşağıdaki tabloda .NET istemcileri ve COM sunucuları için uçbirim ayarlarının birleşimleri gösterilmektedir. Ayrıca kombinasyonlar için elde edilen marshalling gereksinimlerini de gösterir.

.NET istemcisi COM sunucusu Marshalling gereksinimleri
MTA (varsayılan) MTA

STA
Ortak Çalışma Yönlendirmesi.

Birlikte Çalışabilirlik ve COM veriyolunu iletme.
STA MTA

STA
Birlikte Çalışabilirlik ve COM veriyolunu iletme.

Ortak Çalışma Yönlendirmesi.

Yönetilen istemci ve yönetilmeyen sunucu aynı ortamda olduğunda, ara geçiş sıralama hizmeti tüm veri işleme süreçlerini yönetir. Ancak, istemci ve sunucu farklı dairelerde başlatıldığında, COM marshalling de gereklidir. Aşağıdaki çizimde, bir apartmanlar arası çağrının öğeleri gösterilmektedir:

.NET istemcisi ile COM nesnesi arasında uygulamalar arası çağrı

Daireler arası marshalling için aşağıdakileri yapabilirsiniz:

  • Apartmanlar arası marshalling yükünü kabul edin, ki bu yalnızca sınır geçişlerinde çok sayıda çağrı olduğunda fark edilebilir. Daire sınırını başarıyla geçmek için çağrılar için COM bileşeninin tür kitaplığını kaydetmeniz gerekir.

  • İstemci iş parçacığını STA veya MTA olarak ayarlayarak ana iş parçacığını değiştirin. Örneğin, C# istemciniz birçok STA COM bileşenini çağırıyorsa, ana iş parçacığını STA olarak ayarlayarak apartmanlar arası marshallemeyi engelleyebilirsiniz.

    Uyarı

    C# istemcisinin iş parçacığı STA olarak ayarlandıktan sonra, MTA COM bileşenlerine yapılan çağrılar için daireler arası veri transferi gerekir.

Bir apartman modelini açıkça seçme yönergeleri için bkz. Yönetilen ve Yönetilmeyen İş Parçacığı Yönetimi.

Uzaktan Aramaları Düzenleme

Daireler arası yönlendirmede olduğu gibi, nesneler her ayrı işlemde bulunduğunda yönetilen ve yönetilmeyen kod arasındaki her çağrıda COM yönlendirme devreye girer. Örneğin:

  • Uzak bir konakta yönetilen sunucuyu çağıran com istemcisi dağıtılmış COM (DCOM) kullanır.
  • Uzak bir konakta COM sunucusu çağıran yönetilen istemci DCOM kullanır.

Aşağıdaki çizimde, interop marşal ve COM marşal ile süreç ve konak sınırları arasında iletişim kanalları nasıl sağlandığı gösterilmektedir.

İşlemler arası veri aktarımı

Kimlik Koruma

Ortak dil çalışma zaman ortamı, yönetilen ve yönetilmeyen başvuruların kimliğini korur. Aşağıdaki çizimde, işlem ve ana makine sınırları arasında doğrudan yönetilmeyen referansların (üst satır) ve doğrudan yönetilen referansların (alt satır) akışı gösterilmektedir.

COM çağrılabilir sarmalayıcı ve çalışma zamanı çağrılabilir sarmalayıcı

Bu çizimde:

  • Yönetilmeyen istemci, uzak bir konaktan bu başvuruya sahip yönetilen bir nesneden COM nesnesine başvuru alır. uzaktan iletişim mekanizması DCOM'dir.

  • Yönetilen istemci, bir uzak sunucudan bu başvuruyu alan bir COM nesnesinden yönetilen bir nesneye başvuru alır. uzaktan iletişim mekanizması DCOM'dir.

    Uyarı

    Yönetilen sunucunun dışarı aktarılan tür kitaplığının kaydedilmesi gerekir.

Çağıran ve çağıran arasındaki işlem sınırlarının sayısı ilgisizdir; aynı doğrudan başvuru, işlem içi ve işlem dışı çağrılar için gerçekleşir.

Yönetilen uzaktan erişim

Çalışma zamanı, yönetilen nesneler arasında, işlem ve konak sınırlarını aşan bir iletişim kanalı kurmanıza olanak tanıyan yönetilen uzaktan iletişimi de sağlar. Yönetilen uzaktan iletişim, aşağıdaki çizimde gösterildiği gibi iletişim bileşenleri arasında bir güvenlik duvarı barındırabilir:

SOAP veya TcpChannel SOAP veya TcpChannel sınıfını kullanarak güvenlik duvarlarının üzerinden yapılan uzaktan çağrılar

Bazı yönetilmeyen çağrılar, hizmet sunulan bileşenler ile COM arasındaki çağrılar gibi SOAP aracılığıyla kanallandırılabilir.

Başlık Açıklama
Varsayılan Sıralama Davranışı Birlikte çalışma hazırlama hizmetinin verileri sıralamak için kullandığı kuralları açıklar.
Platform Invoke Kullanarak Verileri Yükleme Yöntem parametrelerini bildirmeyi ve bağımsız değişkenleri yönetilmeyen kütüphaneler tarafından dışa aktarılan işlevlere iletmeyi açıklar.
COM Birlikte Çalışma ile Verileri Sıralama COM sarmalayıcılarının, hazırlama davranışını değiştirmek için nasıl özelleştirileceği açıklanır.
Nasıl yapılır: Managed-Code DCOM'yi WCF'ye geçirme DCOM'dan WCF'ye nasıl geçiş yapılacağını açıklar.
Nasıl Yapılır: HRESULT ve İstisnaları Eşleme Özel özel durumları HRESULTs ile eşlemeyi açıklar ve her HRESULT'tan .NET Framework'teki karşılaştırılabilir özel durum sınıfına tam eşleme sağlar.
Genel Türleri Kullanarak Birlikte Çalışma COM birlikte çalışabilirliği için genel türler kullanılırken hangi eylemlerin desteklendiği açıklanır.
Yönetilmeyen Kod ile Birlikte Çalışma Ortak dil çalışma zamanı tarafından sağlanan birlikte çalışabilirlik hizmetlerini açıklar.
Gelişmiş COM Birlikte Çalışabilirliği .NET Framework uygulamanıza COM bileşenlerini ekleme hakkında daha fazla bilgi için bağlantılar sağlar.
Birlikte Çalışma için Tasarım Konuları Tümleşik COM bileşenleri yazmak için ipuçları sağlar.

Kaynak

System.Runtime.InteropServices