İstemcileri Genişletme
Çağrı yapan uygulamada hizmet modeli katmanı, uygulama kodundaki yöntem çağrılarını giden iletilere çevirmekten, bunları temel alınan kanallara göndermekten, sonuçları uygulama kodundaki dönüş değerlerine ve dışarı parametrelerine geri çevirmekten ve sonuçları çağırana geri döndürmekten sorumludur. Hizmet modeli uzantıları, istemci veya dağıtıcı işlevselliği, özel davranışlar, ileti ve parametre kesme ve diğer genişletilebilirlik işlevlerini içeren yürütme veya iletişim davranışını ve özelliklerini değiştirir veya uygular.
Bu konu başlığında, bir WCF istemcisinin ClientRuntimeClientOperation 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) istemci uygulamasında nasıl kullanılacağı açıklanmaktadır. Hizmet çalışma zamanını genişletme hakkında daha fazla bilgi için bkz . Dağıtıcıları Genişletme. Özelleştirme nesnelerini değiştiren ve istemci çalışma zamanına ekleyen davranışlar hakkında daha fazla bilgi için bkz . Çalışma Zamanını Davranışlarla Yapılandırma ve Genişletme.
Müşteriler
İstemcide, WCF istemci nesnesi veya istemci kanalı, yöntem çağrılarını giden iletilere ve gelen iletileri çağıran uygulamaya döndürülen işlem sonuçlarına dönüştürür. (İstemci türleri hakkında daha fazla bilgi için bkz. WCF İstemci Mimarisi.)
WCF istemci türleri, bu uç noktayı ve işlem düzeyi işlevselliğini işleyen çalışma zamanı türlerine sahiptir. Bir uygulama bir işlemi çağırdığında, giden nesneleri bir iletiye çevirir, ClientOperation kesişenleri işler, giden çağrının hedef sözleşmeye uygun olduğunu onaylar ve giden iletiyi ClientRuntimegiden kanalları (çift yönlü hizmetler söz konusu olduğunda gelen kanalları) oluşturmaktan ve yönetmekten sorumlu olan , ek giden ileti işlemeyi (üst bilgi değişikliği gibi) işlemeden sorumlu olan öğesine iletir. her iki yönde de ileti kesicileri işleme ve gelen çift yönlü çağrıları uygun istemci tarafı DispatchRuntime nesnesine yönlendirme. İstemciye ClientOperationClientRuntime iletiler (hatalar dahil) döndürülürken hem de benzer hizmetler sağlar.
Bu iki çalışma zamanı sınıfı, WCF istemci nesnelerinin ve kanallarının işlenmesini özelleştirmeye yönelik ana uzantıdır. sınıfı, ClientRuntime kullanıcıların sözleşmedeki tüm iletiler arasında istemci yürütmesini kesmesine ve genişletmesine olanak tanır. sınıfı, ClientOperation kullanıcıların belirli bir işlemdeki tüm iletiler için istemci yürütmesini kesmesine ve genişletmesine olanak tanır.
Özellikleri değiştirme veya özelleştirme ekleme işlemleri sözleşme, uç nokta ve işlem davranışları kullanılarak yapılır. İstemci çalışma zamanı özelleştirmelerini gerçekleştirmek için bu tür davranışların nasıl kullanılacağı hakkında daha fazla bilgi için bkz . Çalışma Zamanını Davranışlarla Yapılandırma ve Genişletme.
Senaryolar
İstemci sistemini genişletmek için aşağıdakiler de dahil olmak üzere çeşitli nedenler vardır:
Özel İleti Doğrulama. Bir kullanıcı, iletinin belirli bir şema için geçerli olduğunu zorlamak isteyebilir. Bu, arabirimini uygulayarak IClientMessageInspector ve uygulamayı özelliğine MessageInspectors atayarak yapılabilir. Örnekler için bkz . Nasıl yapılır: İstemcideki İletileri İnceleme veya Değiştirme ve Nasıl Yapılır: İstemcideki İletileri İnceleme veya Değiştirme.
Özel İleti Günlüğü. Bir kullanıcı, bir uç nokta üzerinden akan bazı uygulama iletilerini incelemek ve günlüğe kaydetmek isteyebilir. Bu, ileti kesme noktası arabirimleriyle de gerçekleştirilebilir.
Özel İleti Dönüştürmeleri. Kullanıcı, uygulama kodunu değiştirmek yerine çalışma zamanındaki iletiye belirli dönüştürmeler uygulamak isteyebilir (örneğin, sürüm oluşturma için). Bu, ileti kesme noktası arabirimleri ile yeniden gerçekleştirilebilir.
Özel Veri Modeli. Kullanıcı, WCF'de (yani, System.Runtime.Serialization.DataContractSerializer, System.Xml.Serialization.XmlSerializerve nesneleri) varsayılan olarak desteklenenler dışında bir veri veya System.ServiceModel.Channels.Message serileştirme modeline sahip olmak isteyebilir. Bu, ileti biçimlendirici arabirimleri uygulanarak yapılabilir. Daha fazla bilgi için bkz System.ServiceModel.Dispatcher.IClientMessageFormatter . ve ClientOperation.Formatter özelliği.
Özel Parametre Doğrulama. Bir kullanıcı, yazılan parametrelerin geçerli olmasını zorunlu kılmak isteyebilir (XML'nin aksine). Bu, parametre denetçisi arabirimleri kullanılarak yapılabilir. Bir örnek için bkz . Nasıl yapılır: Parametreleri İnceleme veya Değiştirme veya İstemci Doğrulama.
ClientRuntime Sınıfını Kullanma
ClientRuntime sınıfı, iletileri kesen ve istemci davranışını genişleten uzantı nesneleri ekleyebileceğiniz bir genişletilebilirlik noktasıdır. Kesme nesneleri belirli bir sözleşmedeki tüm iletileri işleyebilir, yalnızca belirli işlemler için iletileri işleyebilir, özel kanal başlatma gerçekleştirebilir ve diğer özel istemci uygulaması davranışını uygulayabilir.
özelliği, CallbackDispatchRuntime hizmet tarafından başlatılan geri çağırma istemcileri için dağıtım çalışma zamanı nesnesini döndürür.
OperationSelector özelliği özel bir işlem seçici nesnesi kabul eder.
özelliği, ChannelInitializers istemci kanalını denetleyebilen veya değiştirebilen bir kanal başlatıcısının eklenmesini sağlar.
özelliği, Operations bu işlemin iletilerine özgü işlevler sağlayan özel ileti kesme avcıları ekleyebileceğiniz bir nesne koleksiyonu ClientOperation alır.
özelliği, ManualAddressing bir uygulamanın adreslemeye doğrudan denetim sağlamak için bazı otomatik adresleme üst bilgilerini kapatmasını sağlar.
özelliği, Via iletinin hedefinin değerini aktarım düzeyinde aracıları ve diğer senaryoları destekleyecek şekilde ayarlar.
özelliği, MessageInspectors bir WCF istemcisi üzerinden seyahat eden tüm iletiler için özel ileti kesicileri ekleyebileceğiniz bir nesne koleksiyonu IClientMessageInspector alır.
Ayrıca, sözleşme bilgilerini alan bir dizi başka özellik de vardır:
WCF istemcisi çift yönlü bir WCF istemcisiyse, aşağıdaki özellikler geri çağırma WCF istemci bilgilerini de alır:
WCF istemci yürütmesini bir WCF istemcisinin tamamına genişletmek için, bir özelliği değiştirmenin ClientRuntime mi yoksa arabirim uygulamanın ve bir özelliğe eklemenin de istediğiniz işlevi oluşturup oluşturmadığını görmek için sınıftaki kullanılabilir özellikleri gözden geçirin. Derlemek için belirli bir uzantı seçtikten sonra, çağrıldığında sınıfa erişim ClientRuntime sağlayan bir istemci davranışı uygulayarak uzantınızı uygun ClientRuntime özelliğe ekleyin.
Bir işlem davranışı (uygulayan IOperationBehaviorbir nesne), bir sözleşme davranışı (uygulayan IContractBehaviorbir nesne) veya bir uç nokta davranışı (uygulayan IEndpointBehaviornesne) kullanarak koleksiyona özel uzantı nesneleri ekleyebilirsiniz. Yükleme davranışı nesnesi, uygun davranış koleksiyonuna program aracılığıyla, bildirim temelli olarak (özel bir öznitelik uygulanarak) veya davranışın bir uygulama yapılandırma dosyası kullanılarak eklenmesini sağlamak için özel BehaviorExtensionElement bir nesne uygulanarak eklenir. Ayrıntılar için bkz . Çalışma Zamanını Davranışlarla Yapılandırma ve Genişletme.
WCF istemcisi arasında kesme işlemini gösteren örnekler için bkz . Nasıl yapılır: İstemcide İletileri İnceleme veya Değiştirme.
ClientOperation Sınıfını Kullanma
ClientOperation sınıfı, yalnızca bir hizmet işlemi kapsamındaki özel uzantılar için istemci çalışma zamanı değişikliklerinin ve ekleme noktasının konumudur. (Bir sözleşmedeki tüm iletiler için istemci çalışma zamanı davranışını değiştirmek için sınıfını ClientRuntime kullanın.)
Operations Belirli bir hizmet işlemini temsil eden nesneyi bulmak ClientOperation için özelliğini kullanın. Aşağıdaki özellikler WCF istemci sistemine özel nesneler eklemenize olanak tanır:
Formatter bir işlem için özel IClientMessageFormatter bir uygulama eklemek veya geçerli biçimlendiriciyi değiştirmek için özelliğini kullanın.
ParameterInspectors özel IParameterInspector bir uygulama eklemek veya geçerli uygulamayı değiştirmek için özelliğini kullanın.
Aşağıdaki özellikler, biçimlendirici ve özel parametre denetçileriyle etkileşimde sistemi değiştirmenizi sağlar:
SerializeRequest Giden iletinin seri hale getirilmesini denetlemek için özelliğini kullanın.
DeserializeReply Gelen iletinin seri durumdan çıkarıcısını denetlemek için özelliğini kullanın.
İstek iletisinin Action WS-Addressing eylemini denetlemek için özelliğini kullanın.
BeginMethod zaman uyumsuz bir işlemle ilişkili WCF istemci yöntemlerini belirtmek için ve EndMethod kullanın.
FaultContractInfos AYRıNTı türü olarak SOAP hatalarında görünebilen türleri içeren bir koleksiyon almak için özelliğini kullanın.
IsInitiating İşlem çağrıldığında sırasıyla bir oturumun başlatılıp başlatılmadığını veya yıkılıp yıkılmayacağını denetlemek için ve IsTerminating özelliklerini kullanın.
İşlemin IsOneWay tek yönlü bir işlem olup olmadığını denetlemek için özelliğini kullanın.
Parent içeren ClientRuntime nesneyi almak için özelliğini kullanın.
İşlemin Name adını almak için özelliğini kullanın.
hangi yöntemin SyncMethod işleme eşlenmiş olduğunu denetlemek için özelliğini kullanın.
WCF istemci yürütmesini yalnızca bir hizmet işlemi arasında genişletmek için, bir özelliği değiştirmenin ClientOperation mi yoksa arabirimi uygulamanın ve bir özelliğe eklemenin de istediğiniz işlevi oluşturup oluşturmadığını görmek için sınıftaki kullanılabilir özellikleri gözden geçirin. Derlemek için belirli bir uzantı seçtikten sonra, çağrıldığında sınıfa erişim ClientOperation sağlayan bir istemci davranışı uygulayarak uzantınızı uygun ClientOperation özelliğe ekleyin. Bu davranışın içinde, özelliği gereksinimlerinize uyacak şekilde değiştirebilirsiniz ClientRuntime .
Genellikle, bir işlem davranışını (arabirimi uygulayan IOperationBehavior bir nesne) uygulamak yeterlidir, ancak belirli bir işlem için öğesini bulup OperationDescription davranışı oraya ekleyerek aynı şeyi gerçekleştirmek için uç nokta davranışlarını ve sözleşme davranışlarını da kullanabilirsiniz. Ayrıntılar için bkz . Çalışma Zamanını Davranışlarla Yapılandırma ve Genişletme.
Yapılandırmadan özel davranışınızı kullanmak için özel davranış yapılandırma bölümü işleyicisini kullanarak davranışınızı yükleyin. Özel bir öznitelik oluşturarak davranışınızı da yükleyebilirsiniz.
WCF istemcisi arasında kesme işlemini gösteren örnekler için bkz . Nasıl yapılır: Parametreleri İnceleme veya Değiştirme.