Birlikte Çalışma Hazırlama

Birlikte çalışma hazırlama, yöntem bağımsız değişkenlerinde verilerin nasıl geçirildiğini ve çağrılar sırasında yönetilen ve yönetilmeyen bellek arasında değerleri döndürmeyi yönetir. Birlikte çalışma hazırlama, ortak dil çalışma zamanının sıralama 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. Birlikte çalışma yardımcısı bu türleri sizin için işler. 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 birden çok gösterimin bulunduğu varsayılan bir gösterim ve alternatif gösterimler sağlar. Belirsiz bir türün nasıl sıralandığından ilgili olarak, marshaller'a açık yönergeler sağlayabilirsiniz.

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ışma.

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, bir platform çağırma yöntemi çağrı akışı yönetilen koddan yönetilmeyen koda akar ve geri çağırma işlevleri dahil olduğu durumlar dışında hiçbir zaman başka bir yol değildir. 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 birlikte çalışma yöntemi çağrıları her iki yönde de akabilir.

Platform invoke

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ğıran aynı veri örneği üzerinde çalışamadığında, sıralama gerçekleşir. Birlikte çalışma yardımcısı, çağıranın ve çağıranın kendi veri kopyasına sahip olsalar bile aynı veriler üzerinde çalışıyor gibi görünmesini mümkün kılar.

COM ayrıca, COM daireleri veya farklı COM süreçleri arasında verileri sıralayan bir marshaller'a sahiptir. Aynı COM dairesi içinde yönetilen ve yönetilmeyen kodlar arasında çağrı yapılırken, birlikte çalışma marshaller dahil olan tek marshaller'dır. Farklı bir COM dairesinde veya farklı bir işlemde yönetilen kod ile yönetilmeyen kod arasında çağrı yapıldığında hem birlikte çalışma hem de COM marshaller dahil edilir.

COM İstemcileri ve Yönetilen Sunucular

Regasm.exe (Derleme Kayıt Aracı) tarafından kaydedilen bir tür kitaplığına sahip dışarı aktarılan yönetilen ThreadingModel sunucunun kayıt defteri girdisi olarak Bothayarlanmış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 olur. Aynı apartmanda.
MTA Both MTA olur. Aynı apartmanda.

İstemci ve sunucu aynı dairede olduğundan, birlikte çalışma hazırlama hizmeti tüm veri sıralamasını otomatik olarak işler. Aşağıdaki çizimde, aynı COM stilindeki daire içinde yönetilen ve yönetilmeyen yığınlar arasında çalışan birlikte çalışma marshalling hizmeti gösterilmektedir.

Interop marshalling between managed and unmanaged heaps

Yönetilen bir sunucuyu dışarı aktarmayı planlıyorsanız, COM istemcisinin sunucunun dairesini belirlediğini unutmayın. MTA'da başlatılan bir COM istemcisi tarafından çağrılan yönetilen 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 istemcinin System.STAThreadAttributeSystem.MTAThreadAttributedaire ayarını incelemek ve değiştirmek için , , Thread.ApartmentState özelliğini veya Page.AspCompatMode özelliğini kullanabilirsiniz.

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

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

STA
Birlikte çalışma.

Birlikte çalışma ve COM marshalling.
STA MTA

STA
Birlikte çalışma ve COM marshalling.

Birlikte çalışma.

Yönetilen istemci ve yönetilmeyen sunucu aynı dairede olduğunda, birlikte çalışma hazırlama hizmeti tüm veri sıralamasını işler. 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:

Cross-apartment call between a .NET client and COM object

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

  • Yalnızca sınır boyunca çok sayıda çağrı olduğunda fark edilebilen daireler arası marshalling yükünü kabul edin. 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ırsa, ana iş parçacığını STA olarak ayarlayarak daireler arası sıralama yapmaktan kaçınabilirsiniz.

    Not

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

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

Uzaktan Aramalar Hazırlama

Daireler arası sıralamada olduğu gibi, nesneler ayrı işlemlerde bulunduğunda yönetilen ve yönetilmeyen kod arasındaki her çağrıya COM marshalling dahil edilir. Ö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 birlikte çalışma ve COM marshalllamanın süreç ve konak sınırları arasında iletişim kanalları nasıl sağladığı gösterilmektedir:

Cross-process marshalling

Kimlik Koruma

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

COM callable wrapper and runtime callable wrapper

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, uzak bir konaktan bu başvuruyı alan bir COM nesnesinden yönetilen nesneye başvuru alır. uzaktan iletişim mekanizması DCOM'dir.

    Not

    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 iletişim

Çalışma zamanı, yönetilen nesneler arasında işlem ve konak sınırları arasında iletişim kanalı oluşturmak için kullanabileceğiniz yönetilen uzaktan iletişim 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 or TcpChannel SOAP veya TcpChannel sınıfını kullanarak güvenlik duvarları arasında 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.

Ünvan Açıklama
Varsayılan Sıralama Davranışı Birlikte çalışma hazırlama hizmetinin verileri sıralamak için kullandığı kuralları açıklar.
Platform Çağırma ile Verileri Sıralama Yöntem parametrelerini bildirmeyi ve bağımsız değişkenleri yönetilmeyen kitaplıklar tarafından dışarı aktarılan işlevlere geçirmeyi 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: Yönetilen Kodu DCOM’dan WCF’ye Geçirme DCOM'dan WCF'ye nasıl geçiş yapılacağını açıklar.
Nasıl yapılır: HRESULTs ve Özel Durumları 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.

Başvuru

System.Runtime.InteropServices