Keşif Bulma ve FindCriteria

Bulma bulma işlemi bir istemci tarafından bir veya daha fazla hizmeti keşfetmek için başlatılır ve bulma işleminin ana eylemlerinden biridir. Bulma işlemi ağ üzerinden bir WS-Discovery Probe iletisi gönderir. Belirtilen ölçütlerle eşleşen hizmetler WS-Discovery ProbeMatch iletileriyle yanıt verir. Bulma iletileri hakkında daha fazla bilgi için bkz . WS-Discovery belirtimi.

DiscoveryClient

DiscoveryClient sınıfı, bulma işlemlerini gerçekleştirmek için mekanizma sağlar ve bulma istemci işlemlerinin gerçekleştirilmesini kolaylaştırır. Zaman uyumlu bulma (engelleme) gerçekleştiren bir Find yöntem ve engelleyici olmayan zaman uyumsuz bulma başlatan bir FindAsync yöntem içerir. Her iki yöntem de bir FindCriteria parametre alır ve kullanıcıya bir FindResponse nesne aracılığıyla sonuç sağlar.

Findcriteria

FindCriteria aradığınız hizmetleri belirten ve sonlandırma ölçütlerini (aramanın ne kadar sürmesi gerektiği) belirleyen arama ölçütleri olarak gruplandırılabilen çeşitli özelliklere sahiptir. A FindCriteria , birden çok arama ölçütü içerebilir. Varsayılan olarak, hizmetin tüm bileşenlerle eşleşmesi gerekir, aksi takdirde kendisini eşleşen bir hizmet olarak kabul etmez. Yalnızca bazı ölçütlere uyan hizmetleri bulmak istiyorsanız, hizmette özel bulma mantığı uygulayabilir veya birden çok sorgu kullanabilirsiniz.

Arama ölçütleri şunlardır:

  • ContractTypeNameElement -Isteğe bağlı. Aranmakta olan hizmetin sözleşme adı ve genellikle bir hizmet aranırken kullanılan ölçütler. Birden fazla sözleşme adı belirtilirse, yalnızca TÜM sözleşmelerle eşleşen hizmet uç noktaları yanıt verir. WCF'de uç noktanın yalnızca bir sözleşmeyi destekleyebileceğinizi unutmayın.

  • ScopeElement -Isteğe bağlı. Kapsamlar, tek tek hizmet uç noktalarını kategorilere ayırmak için kullanılan mutlak URI'lerdir. Birden çok uç noktanın aynı sözleşmeyi kullanıma sunması ve uç noktaların bir alt kümesini aramanın bir yolunu bulmak istediğiniz senaryolarda bunu kullanmak isteyebilirsiniz. Birden fazla kapsam belirtilirse, yalnızca TÜM kapsamlarla eşleşen hizmet uç noktaları yanıt verir.

  • ScopeMatchBy - Araştırma iletisindeki kapsamları uç noktanın kapsamlarıyla eşleştirirken kullanılacak eşleşen algoritmayı belirtir. Desteklenen beş kapsam eşleştirme kuralı vardır:

    Kapsam eşleştirme kuralı belirtilmezse kullanılır ScopeMatchByPrefix .

Sonlandırma ölçütleri şunlardır:

  1. Duration - Ağdaki hizmetlerden gelen yanıtları bekleme süresi üst sınırı. Varsayılan süre 20 saniyedir.

  2. MaxResults - Beklenecek en fazla yanıt sayısı. Yanıtlar daha önce Duration alınırsa MaxResults bulma işlemi sona erer.

BulResponse

FindResponse , ağdaki eşleşen hizmetler tarafından gönderilen yanıtları içeren bir Endpoints koleksiyon özelliğine sahiptir. Yanıtlanan hizmet yoksa koleksiyon boştur. Bir veya daha fazla hizmet yanıtlarsa, her yanıt adresi, sözleşmeyi ve hizmetle ilgili bazı ek bilgileri içeren bir EndpointDiscoveryMetadata nesnede depolanır.

Aşağıdaki örnekte kodda bulma işleminin nasıl gerçekleştirebileceğiniz gösterilmektedir.

// Create DiscoveryClient
DiscoveryClient discoveryClient = new DiscoveryClient(new UdpDiscoveryEndpoint());

// Create FindCriteria
FindCriteria findCriteria = new FindCriteria(typeof(IPrinterService));
findCriteria.Scopes.Add(new Uri("http://www.contoso.com/building1/floor1"));
findCriteria.Duration = TimeSpan.FromSeconds(10);

// Find ICalculatorService endpoints
FindResponse findResponse = discoveryClient.Find(findCriteria);

Console.WriteLine("Found {0} ICalculatorService endpoint(s).", findResponse.Endpoints.Count)

Ayrıca bkz.