Duyuru Örnekleri
Duyurular örneği, Bulma özelliğinin Duyuru işlevinin nasıl kullanılacağını gösterir. Duyurular, hizmetlerin hizmetle ilgili meta veriler içeren duyuru iletileri göndermesine olanak tanır. Varsayılan olarak, hizmet başlatıldığında bir merhaba duyurusu gönderilir ve hizmet kapatıldığında bir bye duyurusu gönderilir. Bu duyurular çok noktaya yayın veya noktadan noktaya gönderilebilir. Bu örnek iki proje hizmetinden ve istemciden oluşur.
Hizmet
Bu proje şirket içinde barındırılan bir hesap makinesi hizmeti içerir. yönteminde Main
bir hizmet konağı oluşturulur ve buna bir hizmet uç noktası eklenir. Ardından, bir ServiceDiscoveryBehavior oluşturulur. Duyuruları etkinleştirmek için öğesine bir duyuru uç noktası eklenmelidir ServiceDiscoveryBehavior. Bu durumda, duyuru uç noktası olarak UDP çok noktaya yayın kullanılarak standart bir uç nokta eklenir. Bu, duyuruları iyi bilinen bir UDP adresi üzerinden yayınlar.
Uri baseAddress = new Uri("http://localhost:8000/" + Guid.NewGuid().ToString());
// Create a ServiceHost for the CalculatorService type.
using (ServiceHost serviceHost = new ServiceHost(typeof(CalculatorService), baseAddress))
{
serviceHost.AddServiceEndpoint(typeof(ICalculatorService), new WSHttpBinding(), String.Empty);
ServiceDiscoveryBehavior serviceDiscoveryBehavior = new ServiceDiscoveryBehavior();
// Announce the availability of the service over UDP multicast
serviceDiscoveryBehavior.AnnouncementEndpoints.Add(new UdpAnnouncementEndpoint());
// Make the service discoverable over UDP multicast.
serviceHost.Description.Behaviors.Add(serviceDiscoveryBehavior);
serviceHost.AddServiceEndpoint(new UdpDiscoveryEndpoint());
serviceHost.Open();
// ...
}
İstemci
Bu projede, istemcinin bir AnnouncementServicebarındırdığını unutmayın. Ayrıca, olaylara iki temsilci kaydedilir. Bu olaylar, istemcinin çevrimiçi ve çevrimdışı duyurular alındığında ne yaptığını belirler.
// Create an AnnouncementService instance
AnnouncementService announcementService = new AnnouncementService();
// Subscribe the announcement events
announcementService.OnlineAnnouncementReceived += OnOnlineEvent;
announcementService.OfflineAnnouncementReceived += OnOfflineEvent;
OnOnlineEvent
ve OnOfflineEvent
yöntemleri sırasıyla hello ve bye duyuru iletilerini işler.
static void OnOnlineEvent(object sender, AnnouncementEventArgs e)
{
Console.WriteLine();
Console.WriteLine("Received an online announcement from {0}:", e.AnnouncementMessage.EndpointDiscoveryMetadata.Address);
PrintEndpointDiscoveryMetadata(e.AnnouncementMessage.EndpointDiscoveryMetadata);
}
static void OnOfflineEvent(object sender, AnnouncementEventArgs e)
{
Console.WriteLine();
Console.WriteLine("Received an offline announcement from {0}:", e.AnnouncementMessage.EndpointDiscoveryMetadata.Address);
PrintEndpointDiscoveryMetadata(e.AnnouncementMessage.EndpointDiscoveryMetadata);
}
Bu örneği kullanmak için
Bu örnek HTTP uç noktalarını kullanır ve bu örneği çalıştırmak için uygun URL ACL'lerinin eklenmesi gerekir. Daha fazla bilgi için bkz . HTTP ve HTTPS'yi yapılandırma. Yükseltilmiş bir ayrıcalıkta aşağıdaki komutun yürütülmesi uygun ACL'leri eklemelidir. Komut olduğu gibi çalışmazsa, Etki Alanı ve Kullanıcı Adınızı aşağıdaki bağımsız değişkenlerle değiştirmek isteyebilirsiniz.
netsh http add urlacl url=http://+:8000/ user=%DOMAIN%\%UserName%
Çözümü oluşturun.
client.exe uygulamasını çalıştırın.
service.exe uygulamasını çalıştırın. İstemcinin çevrimiçi bir duyuru aldığına dikkat edin.
service.exe uygulamasını kapatın. İstemcinin çevrimdışı bir duyuru aldığına dikkat edin.