다음을 통해 공유


공지 사항 샘플

알림 샘플에서는 검색 기능의 알림 기능을 사용하는 방법을 보여 줍니다. 공지 사항을 사용하면 서비스에서 서비스에 대한 메타데이터가 포함된 공지 메시지를 보낼 수 있습니다. 기본적으로 서비스가 시작될 때 hello 알림이 전송되고 서비스가 종료되면 안녕 알림이 전송됩니다. 이러한 공지 사항은 멀티캐스트 되거나 점대점으로 보낼 수 있습니다. 이 샘플은 두 개의 프로젝트 서비스 및 클라이언트로 구성됩니다.

서비스

이 프로젝트에는 자체 호스팅 계산기 서비스가 포함되어 있습니다. 메서드에서 Main 서비스 호스트가 만들어지고 서비스 엔드포인트가 추가됩니다. 다음으로, a 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;

OnOnlineEventOnOfflineEvent 메서드는 각각 hello 및 bye 알림 메시지를 처리합니다.

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 엔드포인트를 사용하고 이 샘플을 실행하려면 적절한 URL ACL을 추가해야 합니다. 자세한 내용은 HTTP 및 HTTPS 구성을 참조하세요. 관리자 권한으로 다음 명령을 실행하면 적절한 ACL이 추가됩니다. 명령이 있는 그대로 작동하지 않는 경우 도메인 및 사용자 이름을 다음 인수로 대체할 수 있습니다. netsh http add urlacl url=http://+:8000/ user=%DOMAIN%\%UserName%

  2. 솔루션을 빌드합니다.

  3. client.exe 애플리케이션을 실행합니다.

  4. service.exe 애플리케이션을 실행합니다. 클라이언트는 온라인 알림을 받습니다.

  5. service.exe 애플리케이션을 닫습니다. 클라이언트는 오프라인 알림을 받습니다.