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 Probe
belirtilen ö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 Probe
Resolve
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 false
olarak 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.