Share via


公告範例

此範例示範如何使用探索功能的公告功能。 公告功能可讓服務送出包含服務相關中繼資料的公告訊息。 當服務啟動時,預設會傳送一個 Hello 公告,而當服務關閉時,則會傳送一個 Bye 公告。 這些公告可以多點傳送,也可以點對點傳送。 這個範例包含兩個專案,也就是服務和用戶端。

服務

此專案包含自我裝載的計算機服務。 在 Main 方法中會建立一個服務主機,並在其中加入一個服務端點。 接著,建立 ServiceDiscoveryBehavior。 若要啟用公告,公告端點必須加入至 ServiceDiscoveryBehavior。 在此情況下,標準端點會使用 UDP 多點傳送,當做公告端點加入。 這樣會透過已知的 UDP 位址廣播公告。

Uri baseAddress = new Uri("https://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。 如果命令未正確執行,您可能要將 Domain 和 Username 替換成下列引數。 netsh http add urlacl url=http://+:8000/ user=%DOMAIN%\%UserName%

  2. 建立方案。

  3. 執行 client.exe 應用程式。

  4. 執行 service.exe 應用程式。 請注意,用戶端會收到線上公告。

  5. 關閉 service.exe 應用程式。 請注意,用戶端會收到離線公告。

Dd483353.Important(zh-tw,VS.100).gif 注意:
這些範例可能已安裝在您的電腦上。 請先檢查下列 (預設) 目錄,然後再繼續。

<InstallDrive>:\WF_WCF_Samples

如果此目錄不存在,請移至用於 .NET Framework 4 的 Windows Communication Foundation (WCF) 與 Windows Workflow Foundation (WF) 範例 (英文),以下載所有 Windows Communication Foundation (WCF) 和 WF 範例。 此範例位於下列目錄。

<InstallDrive>:\WF_WCF_Samples\WCF\Basic\Discovery\Announcements