WCF Keşif Nesnesi Modeli

WCF Bulma, çalışma zamanında bulunabilen hizmetler ve bu hizmetleri bulup kullanan istemciler yazmanızı sağlayan birleşik bir programlama modeli sağlayan bir dizi türden oluşur.

Bir Hizmeti Bulunabilir Hale Getirme ve Hizmetleri Bulma

WCF hizmetini bulunabilir hale getirmek için hizmet konağına ServiceDescription bir ServiceDiscoveryBehavior ekleyin ve bir bulma uç noktası ekleyin. Bir hizmet duyuru iletileri gönderecek şekilde yapılandırılmışsa (eklenerek AnnouncementEndpoint) hizmet konağı açıldığında ve kapatıldığında duyuru gönderilir.

Hizmet duyuru iletilerini dinlemek isteyen bir istemci bir duyuru hizmetini barındırıyor ve bir veya daha fazla duyuru uç noktası ekliyor. Duyuru hizmeti duyuru iletileri alır ve duyuru olayları oluşturur.

İstemci, kullanılabilir hizmetleri aramak için sınıfını DiscoveryClient kullanır. İstemci uygulaması, bulma iletilerinin DiscoveryClient gönderileceği yeri belirten bir bulma uç noktası geçirerek sınıfını başlatır. İstemci, bir Probe istek gönderen yöntemini çağırırFind. Bulma iletilerini dinleyen hizmetler bu Probe isteği alır. Hizmet içinde Probebelirtilen ölçütle eşleşiyorsa istemciye bir ProbeMatch ileti gönderir.

Nesne Modeli

WCF Bulma API'sinde aşağıdaki sınıflar tanımlanıyor:

AnnouncementClient

sınıfı, AnnouncementClient duyuru iletileri göndermek için zaman uyumlu ve zaman uyumsuz yöntemler sağlar. Merhaba ve Bye olmak üzere iki tür duyuru iletisi vardır. Bir hizmetin kullanılabilir duruma geldiğini belirtmek için Bir Merhaba iletisi gönderilir ve var olan bir hizmetin kullanılamaz duruma geldiğini belirtmek için bir Bye iletisi gönderilir. Geliştirici, örneğini AnnouncementClient oluşturucu parametresi olarak geçirerek bir örnek AnnouncementEndpoint oluşturur.

Announcementendpoint

AnnouncementEndpoint sabit duyuru sözleşmesine sahip standart bir uç noktayı temsil eder. Bir hizmet veya istemci tarafından duyuru iletileri göndermek ve almak için kullanılır. Varsayılan olarak, AnnouncementEndpoint sınıf WS_Discovery 11 protokol sürümünü kullanacak şekilde ayarlanır.

Announcementservice

AnnouncementService , duyuru iletilerini alan ve işleyen bir duyuru hizmetinin sistem tarafından sağlanan bir uygulamasıdır. Hello veya Bye iletisi alındığında, AnnouncementService örnek duyuru olaylarını tetikleyen uygun sanal yöntemi OnBeginOnlineAnnouncement veya OnBeginOfflineAnnouncementçağırır.

DiscoveryClient

sınıfı DiscoveryClient , kullanılabilir hizmetleri bulmak ve çözmek için bir istemci uygulaması tarafından kullanılır. Belirtilen FindCriteria ve sırasıyla hizmetleri bulmak ve çözümlemek için zaman uyumlu ve ResolveCriteria zaman uyumsuz yöntemler sağlar. Geliştirici bir DiscoveryClient örnek oluşturur ve bir örneğini DiscoveryEndpoint oluşturucu parametresi olarak sağlar.

Bir hizmeti bulmak için geliştirici, kullanılacak arama ölçütlerini içeren bir FindCriteria örnek sağlayan zaman uyumlu veya zaman uyumsuz Find yöntemini çağırır. uygun DiscoveryClient üst bilgileri içeren bir Probe ileti oluşturur ve bulma isteğini gönderir. herhangi bir anda birden fazla bekleyen Find istek olabileceğinden, istemci alınan yanıtlarla bağıntı oluşturur ve yanıtı doğrular. Ardından kullanarak sonuçları işlemin FindResponseçağırana Find teslim eder.

Bilinen bir hizmeti çözmek için geliştirici, bilinen hizmetin içeren EndpointAddress bir örneğini ResolveCriteria sağlayan zaman uyumlu veya zaman uyumsuz Resolve yöntemini çağırır. uygun DiscoveryClient üst bilgilerle iletiyi oluşturur Resolve ve çözümleme isteğini gönderir. Alınan yanıt, bekleyen çözüm istekleriyle ilişkilendirilir ve sonuç kullanılarak ResolveResponseişlemin çağırana Resolve teslim edilir.

Ağda bir bulma ara sunucusu varsa ve DiscoveryClient bulma isteğini çok noktaya yayın biçiminde gönderirse, bulma proxy'si çok noktaya yayın gizleme Hello iletisiyle yanıt verebilir. , DiscoveryClient bekleyen Find iletilere ProxyAvailable veya Resolve isteklere yanıt olarak Hello iletileri aldığında olayı tetikler. Olay ProxyAvailable , bulma proxy'si hakkında öğesini içerir EndpointDiscoveryMetadata . Geçici moddan Yönetilen moda geçmek için bu bilgileri kullanmak geliştiriciye bağlı.

Discoveryendpoint

DiscoveryEndpoint , sabit bulma sözleşmesine sahip standart bir uç noktayı temsil eder. Bulma iletileri göndermek veya almak için bir hizmet veya istemci tarafından kullanılır. Varsayılan olarak, DiscoveryEndpoint modu ve WSDiscovery11 WS-Discovery sürümünü kullanacak ServiceDiscoveryMode.Managed şekilde ayarlanır.

Discoverymessagesequencegenerator

DiscoveryMessageSequenceGenerator , hizmet Bulma veya Duyuru iletileri gönderirken oluşturmak DiscoveryMessageSequence için kullanılır.

Discoveryservice

Soyut DiscoveryService sınıfı, iletileri almak ve işlemek ProbeResolve için bir çerçeve sağlar. bir Probe ileti alındığında, DiscoveryService gelen iletiyi temel alan bir örneği FindRequestContext oluşturur ve sanal yöntemi çağırır OnBeginFind . bir Resolve ileti alındığında, DiscoveryService sanal yöntemi çağırır OnBeginResolve . Özel bir Bulma Hizmeti uygulaması sağlamak için bu sınıftan devralabilirsiniz.

DiscoveryProxy

Soyut DiscoveryProxy sınıfı, bulma ve duyuru iletilerini almak ve işlemek için bir çerçeve sağlar. Özel bulma ara sunucusu uygularken bu sınıftan devralırsınız. Çok noktaya yayın üzerinden bir Probe ileti alındığında sınıf, DiscoveryProxy çok noktaya yayın gizleme iletisinin BeginShouldRedirectFind gönderilmesi gerekip gerekmediğini belirlemek için sanal yöntemi çağırır. Geliştirici çok noktaya yayın gizleme iletisi göndermemeye karar verirse veya ileti tek noktaya yayın üzerinden alındıysa Probe , gelen iletiyi temel alan sınıfın FindRequestContext bir örneğini oluşturur ve sanal yöntemi çağırır OnBeginFind . Çok noktaya yayın üzerinden bir Resolve ileti alındığında, sınıfı sanal DiscoveryProxy yöntemi çağırarak ShouldRedirectResolve çok noktaya yayın gizleme iletisinin gönderilmesi gerekip gerekmediğini belirler. Geliştirici çok noktaya yayın gizleme iletisi göndermemeye karar verirse veya ileti tek noktaya yayın üzerinden alındıysa Resolve , gelen iletiyi temel alan sınıfın ResolveCriteria bir örneğini oluşturur ve sanal yöntemi çağırır OnBeginResolve . Hello veya Bye iletisi alındığında, DiscoveryProxy duyuru olaylarını tetikleyen uygun sanal yöntemi (OnBeginOnlineAnnouncement veya OnBeingOfflineAnnouncement) çağırır.

Discoveryversion

DiscoveryVersion sınıfı, kullanılacak bulma protokolü sürümünü temsil eder.

Endpointdiscoverybehavior

EndpointDiscoveryBehavior sınıfı, uç noktanın bulunabilirliğini denetlemek, uzantıları ve ek sözleşme türü adlarını belirtmek için kullanılır. ve bu uç noktayla ilişkili kapsamlar. Bu davranış, uygulamasını EndpointDiscoveryMetadatayapılandırmak için bir uygulama uç noktasına eklenir. Hizmet konağına eklendiğinde ServiceDiscoveryBehavior , hizmet konağı tarafından barındırılan tüm uygulama uç noktaları varsayılan olarak bulunabilir hale gelir. Geliştirici, özelliğini falseolarak ayarlayarak Enabled belirli bir uç nokta için bulmayı kapatabilir.

Endpointdiscoverymetadata

sınıfı, EndpointDiscoveryMetadata hizmet tarafından yayımlanan uç noktanın sürümden bağımsız bir gösterimini sağlar. Hizmet geliştiricisi tarafından belirtilen uç nokta adreslerini, dinleme URI'lerini, sözleşme türü adlarını, kapsamlarını, meta veri sürümünü ve uzantılarını içerir. FindCriteria bir işlem sırasında Probe istemci tarafından gönderilen ile eşleştirilirEndpointDiscoveryMetadata. Ölçütler eşleşiyorsa EndpointDiscoveryMetadata , istemcisine döndürülür. içindeki ResolveCriteria uç nokta adresi, uç nokta adresiyle EndpointDiscoveryMetadataeşleştirilir. Ölçütler eşleşiyorsa EndpointDiscoveryMetadata , istemcisine döndürülür.

Findcriteria

FindCriteria sınıfı, bir hizmeti bulurken kullanılan ölçütleri belirtmek için kullanılan sürümden bağımsız bir sınıftır. Eşleşen hizmetler için WS-Discovery tanımlı ölçütleri tam olarak destekler. Ayrıca geliştiricilerin eşleştirme işlemi sırasında kullanılabilecek özel değerleri belirtmek için kullanabileceği uzantılara da sahiptir. Geliştirici, geliştiricinin Find aradığı toplam hizmet sayısını veya istemcinin yanıtları ne kadar süre beklediğini belirten değerini belirten Durationöğesini belirterek MaxResultsişlem için sonlandırma ölçütlerini sağlayabilir.

Findrequestcontext

SınıfıFindRequestContext, bir istemci bir Find işlem başlattığında aldığı iletiye göre Probe bulma hizmeti tarafından örneği oluşturulur. İstemci tarafından belirtilen bir örneğini FindCriteria içerir.

BulResponse

sınıfı FindResponse , işleminin yanıtları ile çağıranına FindFind döndürülür. ayrıca içinde FindCompletedEventArgsde bulunur. Bulunan uç noktaların EndpointDiscoveryMetadatakoleksiyonu ve ve DiscoveryMessageSequencesözlüğü EndpointDiscoveryMetadata olan bir koleksiyonu içerir.

Resolvecriteria

ResolveCriteria sınıfı, zaten bilinen bir hizmeti çözümlerken kullanılan ölçütleri belirtmek için kullanılan sürümden bağımsız bir sınıftır. Bilinen hizmetin uç nokta adresini içerir. Geliştirici, istemcinin yanıtları ne kadar süre bekleyeceğini Durationbelirten öğesini belirterek çözümleme işlemi için sonlandırma ölçütlerini sağlayabilir.

Resolveresponse

ResolveResponse, işlemin yanıtıyla yöntemini çağırana ResolveResolve döndürülür. ayrıca içinde ResolveCompletedEventArgsde bulunur. Bulunan uç noktalar ve örneği olan bir örneğini EndpointDiscoveryMetadataDiscoveryMessageSequenceiçerir.

Servicediscoverybehavior

sınıfı, ServiceDiscoveryBehavior geliştiricinin bulma özelliğini bir hizmete eklemesine olanak tanır. Bu davranışı öğesine ServiceHosteklersiniz. sınıfı, ServiceDiscoveryBehavior hizmet konağına eklenen uygulama uç noktaları üzerinde yinelenir ve bulunabilir uç noktalardan bir koleksiyonu EndpointDiscoveryMetadata oluşturur. Tüm uç noktalar varsayılan olarak bulunabilir. Belirli bir uç noktanın bulunabilirliği, bu uç noktaya eklenerek EndpointDiscoveryBehavior denetlenebilir. 'a ServiceDiscoveryBehavior duyuru uç noktaları eklenirse, hizmet konağı açıldığında veya kapatıldığında tüm bulunabilir uç noktaların duyurusu, duyuru uç noktalarının her biri üzerinden gönderilir.

Udpannouncementendpoint

UdpAnnouncementEndpoint sınıfı, UDP çok noktaya yayın bağlaması üzerinden duyuru için önceden yapılandırılmış standart bir duyuru uç noktasıdır. Varsayılan olarak, UdpAnnouncementEndpoint WSApril2005 WS_Discovery sürümünü kullanacak şekilde ayarlanır.

Udpdiscoveryendpoint

UdpDiscoveryEndpoint sınıfı, UDP çok noktaya yayın bağlaması üzerinden bulma için önceden yapılandırılmış standart bir bulma uç noktasıdır. Varsayılan olarak, DiscoveryEndpoint WSDiscovery11 WS-Discovery sürümünü ve ServiceDiscoveryMode.Adhoc modunu kullanacak şekilde ayarlanır.