お知らせのサンプル

お知らせのサンプルでは、探索機能のアナウンス機能を使用する方法を示します。 アナウンスを使用すると、サービスに関するメタデータを含むアナウンス メッセージをサービスから送信できます。 既定では、サービスの起動時に hello アナウンスが送信され、サービスのシャットダウン時にバイアナウンスが送信されます。 これらのアナウンスはマルチキャストにすることも、ポイントツーポイントで送信することもできます。 このサンプルは、2 つのプロジェクト サービスとクライアントで構成されています。

サービス

このプロジェクトには、セルフホステッド電卓サービスが含まれています。 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をホストします。 さらに、2 つのデリゲートがイベントに登録されます。 これらのイベントは、オンラインおよびオフラインのお知らせを受信したときにクライアントが実行する処理を決定します。

// Create an AnnouncementService instance
AnnouncementService announcementService = new AnnouncementService();

// Subscribe the announcement events
announcementService.OnlineAnnouncementReceived += OnOnlineEvent;
announcementService.OfflineAnnouncementReceived += OnOfflineEvent;

OnOnlineEventメソッドと OnOfflineEvent メソッドは、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 アプリケーションを閉じます。 クライアントがオフラインのお知らせを受け取ります。