Aracılığıyla paylaş


Özel Bulma Ölçütleri

CustomFindCriteria örneği, mantık kullanarak özel kapsam eşleşmesinin nasıl oluşturulacağını ve özel bulma hizmetinin nasıl uygulanacağını gösterir. İstemciler, WCF Discovery'nin sistem tarafından sağlanan bulma işlevselliğini geliştirmek ve üzerine eklemeler yapmak için özel kapsam eşleştirme özelliklerini kullanır. Bu örneğin kapsadığı senaryo aşağıdaki gibidir:

  1. İstemci hesap makinesi hizmeti arıyor.

  2. Aramasını daraltmak için istemcinin özel kapsam eşleştirme kuralı kullanması gerekir.

  3. Bu kurala göre, uç noktası istemci tarafından belirtilen kapsamlardan herhangi biri ile eşleşirse hizmet istemciye geri yanıt verir.

Gösterir

  • Kişiselleştirilmiş bulma hizmeti oluşturma.

  • Algoritmaya göre özel kapsam eşleştirmesi uygulamak.

Tartışma

İstemci , "VEYA" türü eşleştirme ölçütlerini arıyor. Uç noktalarındaki kapsamlar istemci tarafından sağlanan kapsamlardan herhangi biriyle eşleşiyorsa hizmet yanıt verir. Bu durumda, istemci aşağıdaki listede yer alan kapsamlardan herhangi birine sahip bir hesap makinesi hizmeti arıyor:

  1. net.tcp://Microsoft.Samples.Discovery/RedmondLocation

  2. net.tcp://Microsoft.Samples.Discovery/SeattleLocation

  3. net.tcp://Microsoft.Samples.Discovery/PortlandLocation

Bunu gerçekleştirmek için istemci, URI üzerinden özel kapsam eşleşmesi aktararak, hizmetlerin özel kapsam eşleşme kuralını kullanmasını sağlar. Özel kapsam eşleştirmeyi kolaylaştırmak için, hizmetin özel kapsam eşleştirme kuralını anlayan ve ilişkili eşleştirme mantığını uygulayan bir özel bulma hizmeti kullanması gerekir.

İstemci projesinde Program.cs dosyasını açın. Nesnenin ScopeMatchBy alanının FindCriteria belirli bir URI'ye ayarlandığını unutmayın. Bu tanımlayıcı hizmete gönderilir. Hizmet bu kuralı anlamıyorsa istemcinin bulma isteğini yoksayar.

Hizmet projesini açın. Özel Bulma Hizmeti'ni uygulamak için üç dosya kullanılır:

  1. AsyncResult.cs: Bu, Bulma yöntemleri için gerekli olan AsyncResult uygulamasıdır.

  2. CustomDiscoveryService.cs: Bu dosya özel bulma hizmetini uygular. Uygulama sınıfını DiscoveryService genişletir ve gerekli yöntemleri geçersiz kılar. OnBeginFind yönteminin uygulanmasına dikkat edin. yöntemi, özel kapsamın kurala göre eşleşip eşleşmediğini istemci tarafından belirtilip belirtilmedidiğini denetler. Bu, istemcinin daha önce belirttiği özel URI ile aynıdır. Özel kural belirtilirse, "OR" eşleştirme mantığını uygulayan kod yolu izlenir.

    Bu özel mantık, hizmetin sahip olduğu uç noktaların her birinde yer alan tüm kapsamlardan geçer. Uç noktanın kapsamlarından herhangi biri istemci tarafından sağlanan kapsamlardan herhangi biriyle eşleşiyorsa, bulma hizmeti bu uç noktayı istemciye geri gönderilen yanıta ekler.

  3. CustomDiscoveryExtension.cs: Bulma hizmetini uygulamanın son adımı, özel bulma hizmetinin bu uygulamasını hizmet konağına bağlamaktır. Burada kullanılan yardımcı sınıfı sınıfıdır CustomDiscoveryExtension . Bu sınıf sınıfını DiscoveryServiceExtension genişletir. Kullanıcının yöntemini geçersiz kılmalıdır GetDiscoveryService . Bu durumda yöntemi, daha önce oluşturulmuş olan özel bulma hizmetinin bir örneğini döndürür. PublishedEndpoints, ReadOnlyCollection<T>'a eklenen tüm uygulama uç noktalarını içeren bir ServiceHost'tir. Özel bulma hizmeti, iç listesini doldurmak için bunu kullanır. Bir kullanıcı diğer uç nokta meta verilerini de ekleyebilir.

Son olarak Program.cs açın. ServiceDiscoveryBehavior ve CustomDiscoveryExtension öğelerinin her ikisinin de konağa eklendiğini dikkate alın. Bu yapıldıktan ve ana bilgisayar bulma iletilerinin alınabileceği bir uç noktaya sahip olduğunda, uygulama özel bulma hizmetini kullanabilir.

İstemcinin adresini bilmeden hizmeti bulabileceğini gözlemleyin.

Örneği ayarlamak, derlemek ve çalıştırmak için

  1. Projeyi içeren çözümü açın.

  2. Projeyi oluşturun.

  3. Hizmet uygulamasını çalıştırın.

  4. İstemci uygulamasını çalıştırın.