Esempio di annunciAnnouncements Sample

In questo esempio viene illustrato come utilizzare la funzionalità degli annunci della funzionalità di individuazione.This sample shows how to use the Announcement functionality of the Discovery feature. Gli annunci consentono ai servizi di inviare messaggi di annuncio contenenti i metadati relativi al servizio.Announcements allow services to send out announcement messages that contain metadata about the service. Per impostazione predefinita, viene inviato un annuncio Hello all'avvio del servizio e un annuncio Bye all'arresto del servizio.By default a hello announcement is sent when the service starts up and a bye announcement is sent when the service shuts down. Questi annunci possono essere trasmessi tramite multicast oppure inviati da punto a punto.These announcements can be multicast or they can be sent point-to-point. Questo esempio è costituito da due progetti, ovvero il servizio e il client.This sample consists of two projects service and client.

ServiceService

Questo progetto contiene un servizio calcolatrice indipendente.This project contains a self-hosted calculator service. Nel metodo Main viene creato un host del servizio a cui viene aggiunto un endpoint del servizio.In the Main method, a service host is created and a service endpoint is added to it. Successivamente viene creato un oggetto ServiceDiscoveryBehavior.Next, a ServiceDiscoveryBehavior is created. Per abilitare gli annunci, è necessario aggiungere un endpoint degli annunci a ServiceDiscoveryBehavior.To enable announcements, an announcement endpoint must be added to the ServiceDiscoveryBehavior. In questo caso viene aggiunto un endpoint standard, tramite multicast UDP, come endpoint degli annunci.In this case a standard endpoint, using UDP multicast is added as the announcement endpoint. In questo modo gli annunci vengono trasmessi su un indirizzo UDP conosciuto.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

In questo progetto si noti che il client ospita un AnnouncementService.In this project, note that the client hosts an AnnouncementService. Due delegati vengono inoltre registrati con gli eventi.Furthermore, two delegates are registered with events. Questi eventi definiscono il comportamento del client alla ricezione di messaggio online e offline.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;  

I metodi OnOnlineEvent e OnOfflineEvent gestiscono rispettivamente i messaggi di annuncio Hello e 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);  
}  

Per usare questo esempioTo use this sample

  1. In questo esempio Usa endpoint HTTP e di eseguire questa operazione appropriata, esempio ACL URL deve essere aggiunto vedere Configuring HTTP and HTTPS per informazioni dettagliate.This sample uses HTTP endpoints and to run this sample, proper URL ACLs must be added see Configuring HTTP and HTTPS for details. L'esecuzione del comando seguente con privilegi elevati consente di aggiungere gli elenchi di controllo di accesso appropriati.Executing the following command at an elevated privilege should add the appropriate ACLs. È possibile che si desideri sostituire il dominio e il nome utente per gli argomenti seguenti quando il comando non funziona nella forma originale.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. Compilare la soluzione.Build the solution.

  3. Eseguire l'applicazione client.exe.Run the client.exe application.

  4. Eseguire l'applicazione service.exe.Run the service.exe application. Si noti che il client riceve un annuncio online.Note the client receives an online announcement.

  5. Chiudere l'applicazione service.exe.Close the service.exe application. Si noti che il client riceve un annuncio offline.Note the client receives an offline announcement.

Importante

È possibile che gli esempi siano già installati nel computer.The samples may already be installed on your machine. Verificare la directory seguente (impostazione predefinita) prima di continuare.Check for the following (default) directory before continuing.

<InstallDrive>:\WF_WCF_Samples

Se questa directory non esiste, andare al Windows Communication Foundation (WCF) e gli esempi di Windows Workflow Foundation (WF) per .NET Framework 4 per scaricare tutti i Windows Communication Foundation (WCF) e WFWF esempi.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) and WFWF samples. Questo esempio si trova nella directory seguente.This sample is located in the following directory.

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

Vedere ancheSee Also