公告範例
此範例示範如何使用探索功能的公告功能。 公告功能可讓服務送出包含服務相關中繼資料的公告訊息。 當服務啟動時,預設會傳送一個 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;
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);
}
若要使用這個範例
這個範例使用 HTTP 端點,若要執行這個範例,則必須加入正確的 URL ACL。如需詳細資訊,請參閱設定 HTTP 和 HTTPS。 以更高的權限執行下列命令應該就能加入適當的 ACL。 如果命令未正確執行,您可能要將 Domain 和 Username 替換成下列引數。
netsh http add urlacl url=http://+:8000/ user=%DOMAIN%\%UserName%
建立方案。
執行 client.exe 應用程式。
執行 service.exe 應用程式。 請注意,用戶端會收到線上公告。
關閉 service.exe 應用程式。 請注意,用戶端會收到離線公告。
注意: |
---|
這些範例可能已安裝在您的電腦上。 請先檢查下列 (預設) 目錄,然後再繼續。
<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
|