Annunci di individuazione e client annunciDiscovery Announcements and Announcement Client

La funzionalità di individuazione WCF consente ai componenti di annunciare la propria disponibilità.The WCF discovery feature enables components to announce their availability. Se viene configurato a tale scopo, un servizio invia annunci Hello e Bye.If configured to do so, a service sends Hello and Bye announcements. I client o altri componenti possono attendere tali messaggi dell'annuncio ed eseguire azioni su di loro.Clients or other components can listen for such announcement messages and act on them. In questo modo viene fornito un metodo alternativo che consente ai client di essere consapevoli della presenza di servizi.This provides an alternative method for clients to be aware of services. La funzionalità degli annunci può essere utilizzata per vari scopi. Se ad esempio i servizi entrano ed escono periodicamente da una rete, gli annunci possono costituire un'alternativa migliore rispetto alla ricerca di servizi.Announcement functionality has several uses, for example, if the services enter and leave a network frequently, announcements may be a better alternative than searching for services. Con questo approccio, il traffico di rete è ridotto e il client è in grado di sapere se un servizio è presente o assente contestualmente alla ricezione degli annunci.With this approach, the network traffic is reduced and the client can learn about the presence or departure of the service as soon as announcements are received.

Annunci di individuazioneDiscovery Announcements

Se un servizio configurato per gli annunci si unisce a una rete e diviene individuabile, invia un messaggio Hello che annuncia la propria disponibilità ai client in ascolto.When a service configured for announcements joins a network and becomes discoverable, it sends a Hello message announcing its availability to listening clients. Il messaggio contiene le informazioni relative all'individuazione sul servizio, ad esempio il contratto, l'indirizzo endpoint e gli ambiti associati.The message contains discovery related information about the service, such as its contract, endpoint address and associated scopes. È possibile specificare la destinazione dell'invio del messaggio di annuncio con la classe AnnouncementEndpoint.You can specify where the announcement message is sent with the AnnouncementEndpoint class. Se l'endpoint annunci è un elemento UdpAnnouncementEndpoint, Hello e Bye sono multicast, mentre se l'endpoint annunci è unicast, i messaggi vengono inviati direttamente all'endpoint specificato.If the announcement endpoint is a UdpAnnouncementEndpoint then the Hello and Bye are multicast appropriately, or if the announcement endpoint is unicast, the messages are sent directly to the specified endpoint.

Nota

Gli annunci vengono inviati quando l'host del servizio viene aperto e chiuso.Announcements are sent when the service host opens and closes. Se queste chiamate non vengono completate in modo corretto, è possibile che il messaggio dell'annuncio non venga inviato. Se ad esempio si verificano errori nel servizio, il messaggio di annuncio Bye non viene inviato.If these calls do not finish properly the announcement message may not be sent out. For example if the service faults, then the Bye announcement message is not sent.

Suggerimento

È possibile personalizzare la funzionalità di annunci, con la possibilità di inviare annunci in qualsiasi momento.You can customize the announcement functionality, allowing you to send announcements whenever you choose.

.NET Framework 4.6.1.NET Framework 4.6.1 definisce AnnouncementEndpoint e UdpAnnouncementEndpoint come endpoint standard per consentire a servizi e client di inviare facilmente annunci Hello e Bye. defines the AnnouncementEndpoint and UdpAnnouncementEndpoint as standard endpoints to allow services and clients to easily send Hello and Bye announcements.

Annunci sul servizioAnnouncements on the Service

Per configurare l'invio di annunci da parte del servizio, aggiungere un ServiceDiscoveryBehavior con un endpoint annunci.To configure the service to send announcements, add a ServiceDiscoveryBehavior with an announcement endpoint. Nell'esempio seguente viene mostrato come aggiungere a livello di codice questo comportamento all'host del servizio.The following example shows how to programmatically add this behavior to the service host. In questo esempio viene utilizzato UdpAnnouncementEndpoint, che implica che gli annunci vengono inviati in multicast a un percorso specificato dallo specifico endpoint standard.This example uses the UdpAnnouncementEndpoint, which implies that the announcements are multicast to a location specified by that standard endpoint.

ServiceDiscoveryBehavior serviceDiscoveryBehavior = new ServiceDiscoveryBehavior();
serviceDiscoveryBehavior.AnnouncementEndpoints.Add(new UdpAnnouncementEndpoint());
serviceHost.Description.Behaviors.Add(serviceDiscoveryBehavior);

È inoltre possibile configurare il comportamento nel file di configurazione, come indicato nell'esempio seguente.The behavior can be configured in the configuration file as well, as shown in the following example.

<services>
  <service behaviorConfiguration="CalculatorBehavior" name="Microsoft.Samples.Discovery.CalculatorService">
    <!--Add Discovery Endpoint-->
    <endpoint name="udpDiscoveryEpt" kind="udpDiscoveryEndpoint" />
  </service>
</services>
<behaviors>
  <serviceBehaviors>
    <behavior name="CalculatorBehavior">
      <!--Add Discovery behavior-->
      <serviceDiscovery>
        <announcementEndpoints>
          <endpoint kind="udpAnnouncementEndpoint" />
        </announcementEndpoints>
      </serviceDiscovery>
    </behavior>
  </serviceBehaviors>
</behaviors>  

Negli esempi precedenti viene configurato un servizio per inviare messaggi di annuncio in modo automatico.The preceding examples configure a service to automatically send announcement messages. È inoltre possibile inviare messaggi di annuncio in modo esplicito tramite la classe AnnouncementClient.You can also send announcement messages explicitly by using the AnnouncementClient class.

Annunci sul clientAnnouncements on the Client

Un'applicazione client deve ospitare un servizio annunci per rispondere ai messaggi Hello e Bye ed eseguire la sottoscrizione agli eventi OnlineAnnouncementReceived e OfflineAnnouncementReceived.A client application must host an announcement service to respond to the Hello and Bye messages and subscribe to the OnlineAnnouncementReceived and OfflineAnnouncementReceived events. Nell'esempio seguente viene illustrato come effettuare questa operazione.The following example shows how to do this.

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

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

// Create ServiceHost for the AnnouncementService
using (ServiceHost announcementServiceHost = new ServiceHost(announcementService))
{  
    // Listen for the announcements sent over UDP multicast
    announcementServiceHost.AddServiceEndpoint(new UdpAnnouncementEndpoint());
    announcementServiceHost.Open();

    Console.WriteLine("Press <ENTER> to terminate.");
    Console.ReadLine();
}  

Alla ricezione di un messaggio Hello o Bye è possibile accedere ai metadati di individuazione di endpoint tramite AnnouncementEventArgs, come indicato nell'esempio seguente.When a Hello or Bye message is received, you can access the endpoint discovery metadata through AnnouncementEventArgs as shown in the following example.

static void OnOnlineEvent(object sender, AnnouncementEventArgs e)
{
    Console.WriteLine("Received an online announcement from {0}", 
e.EndpointDiscoveryMetadata.Address);
}

static void OnOfflineEvent(object sender, AnnouncementEventArgs e)
{
    Console.WriteLine("Received an offline announcement from {0}", 
e.EndpointDiscoveryMetadata.Address);
}