Бөлісу құралы:


Пример объявлений

В примере "Объявления" показано, как использовать функциональность "Объявления" в функции обнаружения. Объявления позволяют службам отправлять сообщения объявлений, содержащие метаданные о службе. По умолчанию сообщение 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);
}

Использование этого примера

  1. В этом примере используются конечные точки HTTP, и для запуска этого примера необходимо добавить правильные списки управления доступом (ACL) для URL. Дополнительные сведения см. в разделе "Настройка HTTP и HTTPS". При выполнении следующей команды с повышенными привилегиями необходимо добавить соответствующие списки управления доступом. Вы можете заменить домен и имя пользователя в аргументах, если команда не работает в исходном виде. netsh http add urlacl url=http://+:8000/ user=%DOMAIN%\%UserName%

  2. Создайте решение.

  3. Запустите приложение client.exe.

  4. Запустите приложение service.exe. Обратите внимание, что клиент получает объявление в Интернете.

  5. Закройте приложение service.exe. Обратите внимание, что клиент получает офлайн уведомление.