Aracılığıyla paylaş


Dağıtıcıları Genişletme

Dağıtıcılar, gelen iletileri temel alınan kanallardan çekmekten, uygulama kodunda yöntem çağrılarına çevirmekten ve sonuçları arayana geri göndermekten sorumludur. Dağıtıcı uzantıları bu işlemeyi değiştirmenize olanak sağlar. İletilerin veya parametrelerin içeriğini inceleyen veya değiştiren ileti veya parametre denetçileri uygulayabilirsiniz. İletilerin işlemlere yönlendirilmiş şeklini değiştirebilir veya başka işlevler sağlayabilirsiniz.

Bu konu başlığında, bir dağıtıcının DispatchRuntimeDispatchOperation varsayılan yürütme davranışını değiştirmek veya iletileri, parametreleri durdurmak veya değiştirmek ya da kanal katmanından göndermeden veya almaya başlamadan önce veya sonra değerleri döndürmek için ve sınıflarının bir Windows Communication Foundation (WCF) hizmet uygulamasında nasıl kullanılacağı açıklanmaktadır. Eşdeğer istemci çalışma zamanı ileti işleme hakkında daha fazla bilgi için bkz . İstemcileri Genişletme. Türlerin IExtensibleObject<T> çeşitli çalışma zamanı özelleştirme nesneleri arasında paylaşılan duruma erişirken oynadığı rolü anlamak için bkz . Genişletilebilir Nesneler.

Sevkiyatçılar

Hizmet modeli katmanı, geliştiricinin programlama modeliyle temel alınan ileti değişimi (genellikle kanal katmanı olarak adlandırılır) arasında dönüştürme gerçekleştirir. WCF'de kanal ve uç nokta dağıtıcıları (ChannelDispatcher ve EndpointDispatchersırasıyla), yeni kanalları kabul etmek, iletileri almak, işlem gönderimi ve çağırma ve yanıt işlemeden sorumlu hizmet bileşenleridir. Dağıtıcı nesneleri alıcı nesneleridir, ancak çift yönlü hizmetlerdeki geri çağırma sözleşmesi uygulamaları da dağıtıcı nesnelerini inceleme, değişiklik veya uzantı için kullanıma sunar.

Kanal dağıtıcısı (ve eşlikçisi IChannelListener), iletileri alt kanaldan çıkarır ve iletileri ilgili uç nokta dağıtıcılarına iletir. Her uç nokta dağıtıcısının, iletileri uygun DispatchOperationöğesine yönlendiren ve işlemi uygulayan yöntemi çağırmaktan sorumlu olan bir DispatchRuntime değeri vardır. Çeşitli isteğe bağlı ve gerekli uzantı sınıfları yol boyunca çağrılır. Bu konu başlığı altında, bu parçaların nasıl bir araya geldiği ve temel işlevselliği genişletmek için özellikleri nasıl değiştirebileceğiniz ve kendi kodunuzu nasıl takabileceğiniz açıklanmaktadır.

Dağıtıcı özellikleri ve değiştirilen özelleştirme nesneleri hizmet, uç nokta, sözleşme veya işlem davranışı nesneleri kullanılarak eklenir. Bu konu başlığında davranışların nasıl kullanılacağı açıklanmamaktadır. Dağıtıcı değişikliklerini eklemek için kullanılan türler hakkında daha fazla bilgi için bkz . Çalışma Zamanını Davranışlarla Yapılandırma ve Genişletme.

Aşağıdaki grafik, bir hizmetteki mimari öğelerin üst düzey bir görünümünü sağlar.

The dispatch runtime architecture

Kanal Dağıtıcıları

ChannelDispatcher Belirli bir URI'deki (IChannelListenerdinleme URI'si olarak adlandırılır) bir hizmeti örneğiyle ilişkilendirmek için bir nesne oluşturulur. Her ServiceHost nesnenin, her biri yalnızca bir dinleyici ve dinleme URI'siyle ilişkilendirilmiş birçok ChannelDispatcher nesnesi olabilir. bir ileti geldiğinde, ChannelDispatcher uç noktanın iletiyi kabul edip etmeyeceğini ilişkili EndpointDispatcher nesnelerin her birini sorgular ve iletiyi bunu yapabilene geçirir.

Kanal oturumunun ömrünü ve davranışını denetleyen tüm özellikler nesne üzerinde ChannelDispatcher inceleme veya değişiklik için kullanılabilir. Bunlar arasında özel kanal başlatıcıları, kanal dinleyicisi, konak, ilişkili InstanceContextve benzeri bulunur.

Uç Nokta Dağıtıcıları

Nesne EndpointDispatcher , bir ChannelDispatcher iletinin hedef adresi ile ve ileti eylemi özelliğiyle AddressFilter eşleştiğinde gelen iletilerin işlenmesinden ContractFilter sorumludur. İki EndpointDispatcher nesne bir iletiyi kabul edebilirse, FilterPriority özellik değeri yüksek öncelikli uç noktayı belirler.

Dağıtıcının işlenmesini EndpointDispatcher özelleştirmek için kullanabileceğiniz iki ana hizmet modeli uzantısı noktası ( DispatchRuntime ve DispatchOperation sınıfları) almak için öğesini kullanın. DispatchRuntime sınıfı, kullanıcıların dağıtıcıyı sözleşme kapsamında (yani bir sözleşmedeki tüm iletiler için) kesmesine ve genişletmesine olanak tanır. DispatchOperation sınıfı, kullanıcıların bir işlem kapsamındaki dağıtıcıyı kesmesine ve genişletmesine olanak tanır (bir işlemdeki tüm iletiler için).

Senaryolar

Dağıtıcıyı genişletmek için çeşitli nedenler vardır:

  • Özel İleti Doğrulama. Kullanıcılar bir iletinin belirli bir şema için geçerli olduğunu zorunlu kılabilir. Bu, ileti kesme noktası arabirimleri uygulanarak yapılabilir. Bir örnek için bkz . İleti Denetçileri.

  • Özel İleti Günlüğü. Kullanıcılar bir uç nokta üzerinden akan bazı uygulama iletilerini inceleyebilir ve günlüğe kaydedebilir. Bu, ileti kesme noktası arabirimleriyle de gerçekleştirilebilir.

  • Özel İleti Dönüştürmeleri. Kullanıcılar çalışma zamanında iletiye belirli dönüştürmeler uygulayabilir (örneğin, sürüm oluşturma için). Bu, ileti kesme noktası arabirimleri ile yeniden gerçekleştirilebilir.

  • Özel Veri Modeli. Kullanıcılar, WCF'de (yani, System.Runtime.Serialization.DataContractSerializer, System.Xml.Serialization.XmlSerializerve ham iletiler) varsayılan olarak desteklenenler dışında bir veri serileştirme modeline sahip olabilir. Bu, ileti biçimlendirici arabirimleri uygulanarak yapılabilir. Örnek için bkz . İşlem Biçimlendiricisi ve İşlem Seçici.

  • Özel Parametre Doğrulama. Kullanıcılar, yazılan parametrelerin geçerli olmasını zorunlu kılabilir (XML'nin aksine). Bu, parametre denetçisi arabirimleri kullanılarak yapılabilir.

  • Özel İşlem Gönderimi. Kullanıcılar, gönderme işlemini eylem dışında bir şey üzerinde (örneğin, gövde öğesinde veya özel bir ileti özelliğinde) uygulayabilir. Bu, arabirimi kullanılarak IDispatchOperationSelector yapılabilir. Örnek için bkz . İşlem Biçimlendiricisi ve İşlem Seçici.

  • Nesne Havuzu. Kullanıcılar, her çağrı için yeni bir tane ayırma yerine örnekleri havuza alabilir. Bu, örnek sağlayıcı arabirimleri kullanılarak uygulanabilir. Bir örnek için bkz . Havuz oluşturma.

  • Örnek Kiralama. Kullanıcılar, .NET Framework uzaktan iletişimine benzer şekilde örnek ömrü için bir kiralama düzeni uygulayabilir. Bu, örnek bağlamı yaşam süresi arabirimleri kullanılarak yapılabilir.

  • Özel Hata İşleme. Kullanıcılar hem yerel hataların nasıl işlendiğini hem de hataların istemcilere nasıl geri iletıldığını denetleyebiliyor. Bu, arabirimler kullanılarak IErrorHandler uygulanabilir.

  • Özel Yetkilendirme Davranışları. Kullanıcılar, Sözleşme veya İşlem çalışma zamanı parçalarını genişleterek ve iletide bulunan belirteçlere göre güvenlik denetimleri ekleyerek özel erişim denetimi uygulayabilir. Bu, ileti kesme aracı veya parametre kesme aracı arabirimleri kullanılarak gerçekleştirilebilir. Örnekler için bkz . Güvenlik Genişletilebilirliği.

    Dikkat

    Güvenlik özelliklerini değiştirmek WCF uygulamalarının güvenliğini tehlikeye atma potansiyeline sahip olduğundan, güvenlikle ilgili değişiklikleri dikkatli bir şekilde üstlenmeniz ve dağıtımdan önce kapsamlı bir şekilde test edin.

  • Özel WCF Çalışma Zamanı Doğrulayıcıları. WCF uygulamalarıyla ilgili kurumsal düzeyde ilkeleri zorunlu kılmak için hizmetleri, sözleşmeleri ve bağlamaları inceleyen özel doğrulayıcılar yükleyebilirsiniz. (Örneğin, bkz. Nasıl yapılır: Kuruluştaki Uç Noktaları Kilitleme.)

DispatchRuntime Sınıfını Kullanma

DispatchRuntime Bir hizmetin veya tek bir uç noktanın varsayılan davranışını değiştirmek ya da aşağıdaki hizmet işlemlerinden birine veya her ikisine (veya çift yönlü istemci durumunda istemci işlemlerine) özel değişiklikler uygulayan nesneler eklemek için sınıfını kullanın:

  • Gelen iletilerin nesnelere dönüştürülmesi ve bu nesnelerin bir hizmet nesnesi üzerinde yöntem çağrıları olarak serbest bırakılması.

  • Yanıttan alınan nesnelerin bir hizmet işlemi çağrısına giden iletilere dönüştürülmesi.

, DispatchRuntime bir ileti tanınmadığında bile belirli bir sözleşmedeki tüm iletiler için kanalı veya uç nokta dağıtıcısını kesmenize ve genişletmenize olanak tanır. Sözleşmede bildirilen hiçbir ile eşleşmeyen bir ileti geldiğinde, özelliği tarafından UnhandledDispatchOperation döndürülen işleme gönderilir. Belirli bir işlemin tüm iletilerine müdahale etmek veya bunları genişletmek için sınıfına DispatchOperation bakın.

Sınıfı tarafından DispatchRuntime kullanıma sunulan dört ana dağıtıcı genişletilebilirliği alanı vardır:

  1. Kanal bileşenleri, kanal dağıtıcısının DispatchRuntime kanalları kabul etme ve kapatma şeklini özelleştirmek için özelliği tarafından ChannelDispatcher döndürülen ilişkili kanal dağıtıcısının ve özelliklerini kullanır. Bu kategori ve ChannelInitializersInputSessionShutdownHandlers özelliklerini içerir.

  2. İleti bileşenleri işlenen her ileti için özelleştirilir. Bu kategori , , OperationSelectorOperationsve ErrorHandlers özelliklerini içerirMessageInspectors.

  3. Örnek bileşenleri, hizmet türünün örneklerinin oluşturulmasını, kullanım ömrünü ve atılmasını özelleştirir. Hizmet nesnesi yaşam süreleri hakkında daha fazla bilgi için özelliğine InstanceContextMode bakın. Bu kategori ve InstanceContextInitializersInstanceProvider özelliklerini içerir.

  4. Güvenlikle ilgili bileşenler aşağıdaki özellikleri kullanabilir:

Genellikle, özel uzantı nesneleri bir DispatchRuntime özelliğe atanır veya bir hizmet davranışı (uygulayan IServiceBehaviorbir nesne), bir sözleşme davranışı (uygulayan IContractBehaviorbir nesne) veya bir uç nokta davranışı (uygulayan IEndpointBehaviorbir nesne) tarafından bir koleksiyona eklenir. Ardından, yükleme davranışı nesnesi program aracılığıyla veya bir uygulama yapılandırma dosyası kullanılarak eklenmesini sağlamak için özel BehaviorExtensionElement bir nesne uygulanarak uygun davranış koleksiyonuna eklenir.

Çift yönlü istemcilerin (çift yönlü hizmet tarafından belirtilen bir geri çağırma sözleşmesi uygulayan istemciler) özelliği kullanılarak CallbackDispatchRuntime erişilebilen bir DispatchRuntime nesnesi de vardır.

DispatchOperation Sınıfını Kullanma

DispatchOperation sınıfı, çalışma zamanı değişikliklerinin konumu ve yalnızca bir hizmet işlemi kapsamındaki özel uzantılar için ekleme noktasıdır. (Bir sözleşmedeki tüm iletiler için hizmet çalışma zamanı davranışını değiştirmek için sınıfını DispatchRuntime kullanın.)

Özel bir hizmet davranışı nesnesi kullanarak değişiklikleri yükleyin DispatchOperation .

Operations Belirli bir hizmet işlemini temsil eden nesneyi bulmak DispatchOperation için özelliğini kullanın.

Aşağıdaki özellikler çalışma zamanı yürütmesini işlem düzeyinde denetler:

Ayrıca bkz.