Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
В примере "Объявления" показано, как использовать функциональность "Объявления" в функции обнаружения. Объявления позволяют службам отправлять сообщения объявлений, содержащие метаданные о службе. По умолчанию сообщение hello отправляется при запуске службы, а объявление bye отправляется при завершении работы службы. Эти объявления могут быть многоадресной рассылкой или могут быть отправлены точечно. Этот пример состоит из двух компонентов: сервиса проектов и клиента.
Услуга
Этот проект содержит локальную службу калькулятора. В методе Main создается узел службы, а конечная точка службы добавляется в нее. Затем создается объект ServiceDiscoveryBehavior . Чтобы включить объявления, необходимо добавить конечную точку для объявлений в ServiceDiscoveryBehavior. В этом случае стандартная конечная точка с помощью многоадресной рассылки UDP добавляется в качестве конечной точки объявления. Это передает объявления по известному адресу UDP.
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();
// ...
}
Клиент
В этом проекте обратите внимание, что клиент размещает объект AnnouncementService. Кроме того, два делегата зарегистрированы на мероприятиях. Эти события диктуют, что делает клиент, когда он получает объявления онлайн и оффлайн.
// Create an AnnouncementService instance
AnnouncementService announcementService = new AnnouncementService();
// Subscribe the announcement events
announcementService.OnlineAnnouncementReceived += OnOnlineEvent;
announcementService.OfflineAnnouncementReceived += OnOfflineEvent;
Методы OnOnlineEvent и OnOfflineEvent соответственно обрабатывают сообщения приветствия и прощания.
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);
}
Использование этого примера
В этом примере используются конечные точки HTTP, и для запуска этого примера необходимо добавить правильные списки управления доступом (ACL) для URL. Дополнительные сведения см. в разделе "Настройка HTTP и HTTPS". При выполнении следующей команды с повышенными привилегиями необходимо добавить соответствующие списки управления доступом. Вы можете заменить домен и имя пользователя в аргументах, если команда не работает в исходном виде.
netsh http add urlacl url=http://+:8000/ user=%DOMAIN%\%UserName%Создайте решение.
Запустите приложение client.exe.
Запустите приложение service.exe. Обратите внимание, что клиент получает объявление в Интернете.
Закройте приложение service.exe. Обратите внимание, что клиент получает офлайн уведомление.