Beispiel für AnkündigungenAnnouncements Sample

In diesem Beispiel wird die Verwendung der Ankündigungsfunktionalität der Discovery-Funktion erläutert.This sample shows how to use the Announcement functionality of the Discovery feature. Ankündigungen ermöglichen es Diensten, Ankündigungsmeldungen mit Metadaten zum Dienst zu senden.Announcements allow services to send out announcement messages that contain metadata about the service. Standardmäßig wird als Ankündigung "hello" gesendet, wenn der Dienst startet, und "bye", wenn der Dienst beendet wird.By default a hello announcement is sent when the service starts up and a bye announcement is sent when the service shuts down. Diese Ankündigungen können per Multicast oder von Punkt zu Punkt gesendet werden.These announcements can be multicast or they can be sent point-to-point. Das folgende Beispiel besteht aus zwei Projekten, Service und Client.This sample consists of two projects service and client.

DienstService

Dieses Projekt enthält einen selbst gehosteten Rechnerdienst.This project contains a self-hosted calculator service. In der Main-Methode wird ein Diensthost erstellt, dem ein Dienstendpunkt hinzugefügt wird.In the Main method, a service host is created and a service endpoint is added to it. Danach wird ein ServiceDiscoveryBehavior erstellt.Next, a ServiceDiscoveryBehavior is created. Um Ankündigungen zu aktivieren, muss dem ServiceDiscoveryBehavior ein Ankündigungsendpunkt hinzugefügt werden.To enable announcements, an announcement endpoint must be added to the ServiceDiscoveryBehavior. In diesem Fall wird als Ankündigungsendpunkt ein Standardendpunkt mithilfe von UDP-Multicast hinzugefügt.In this case a standard endpoint, using UDP multicast is added as the announcement endpoint. Dadurch werden die Ankündigungen über eine bekannte UDP-Adresse übertragen.This broadcasts the announcements over a well-known UDP address.

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();  
    // ...  
}  

ClientClient

Beachten Sie in diesem Projekt, dass der Client einen AnnouncementService hostet.In this project, note that the client hosts an AnnouncementService. Darüber hinaus werden zwei Delegaten bei Ereignissen registriert.Furthermore, two delegates are registered with events. Diese Ereignisse geben vor, wie der Client vorgeht, wenn Online- und Offlineankündigungen empfangen werden.These events dictate what the client does when online and offline announcements are received.

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

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

Die OnOnlineEvent-Methode und die OnOfflineEvent-Methode behandeln die entsprechenden Ankündigungen "hello" und "bye".The OnOnlineEvent and OnOfflineEvent methods handle the hello and bye announcement messages respectively.

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);  
}  

So verwenden Sie dieses BeispielTo use this sample

  1. Dieses Beispiel verwendet die HTTP-Endpunkte und Ausführung dieser Beispiele, die richtige URL-ACLs hinzugefügt werden ausführliche Informationen finden Sie Configuring HTTP and HTTPS Details.This sample uses HTTP endpoints and to run this sample, proper URL ACLs must be added see Configuring HTTP and HTTPS for details. Durch die Ausführung des folgenden Befehls mit erweiterten Berechtigungen werden die entsprechenden ACLs hinzugefügt.Executing the following command at an elevated privilege should add the appropriate ACLs. Es empfiehlt sich, die Domäne und den Benutzernamen durch die folgenden Argumente zu ersetzen, wenn der Befehl nicht funktioniert.You may want to substitute your Domain and Username for the following arguments if the command does not work as is. netsh http add urlacl url=http://+:8000/ user=%DOMAIN%\%UserName%

  2. Erstellen Sie die Projektmappe.Build the solution.

  3. Führen Sie die CLIENT.EXE-Anwendung aus.Run the client.exe application.

  4. Führen Sie die SERVICE.EXE-Anwendung aus.Run the service.exe application. Beachten Sie, dass der Client eine Onlineankündigung empfängt.Note the client receives an online announcement.

  5. Schließen Sie die SERVICE.EXE-Anwendung.Close the service.exe application. Beachten Sie, dass der Client eine Offlineankündigung empfängt.Note the client receives an offline announcement.

Wichtig

Die Beispiele sind möglicherweise bereits auf dem Computer installiert.The samples may already be installed on your machine. Suchen Sie nach dem folgenden Verzeichnis (Standardverzeichnis), bevor Sie fortfahren.Check for the following (default) directory before continuing.

<InstallDrive>:\WF_WCF_Samples

Wenn dieses Verzeichnis nicht vorhanden ist, rufen Sie Windows Communication Foundation (WCF) and Windows Workflow Foundation (WF) Samples for .NET Framework 4 auf, um alle Windows Communication Foundation (WCF)Windows Communication Foundation (WCF) - und WFWF -Beispiele herunterzuladen.If this directory does not exist, go to Windows Communication Foundation (WCF) and Windows Workflow Foundation (WF) Samples for .NET Framework 4 to download all Windows Communication Foundation (WCF)Windows Communication Foundation (WCF) and WFWF samples. Dieses Beispiel befindet sich im folgenden Verzeichnis.This sample is located in the following directory.

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

Siehe auchSee Also