Condividi tramite


Esempio di base

L'esempio di individuazione di base illustra come rendere individuabile un servizio e come cercare e chiamare un servizio individuabile. Questo esempio è costituito da due progetti: servizio e client.

Annotazioni

Questo esempio implementa l'individuazione nel codice. Per un esempio che implementa l'individuazione nella configurazione, vedere Configurazione.

Servizio

Si tratta di una semplice implementazione del servizio calcolatrice. Il codice relativo all'individuazione si trova in Main, dove viene aggiunto un ServiceDiscoveryBehavior all'host del servizio e UdpDiscoveryEndpoint viene aggiunto come mostrato nel codice seguente.

using (ServiceHost serviceHost = new ServiceHost(typeof(CalculatorService), baseAddress))
{
    serviceHost.AddServiceEndpoint(typeof(ICalculatorService), new
      WSHttpBinding(), String.Empty);

    // Make the service discoverable over UDP multicast
    serviceHost.Description.Behaviors.Add(new ServiceDiscoveryBehavior());
    serviceHost.AddServiceEndpoint(new UdpDiscoveryEndpoint());

    serviceHost.Open();
    // ...
}

Cliente

Il client usa un DynamicEndpoint per individuare il servizio. Il DynamicEndpoint, un endpoint standard, determina l'endpoint del servizio quando si apre il client. In questo caso, il DynamicEndpoint cerca il servizio in base al contratto di servizio. Esegue DynamicEndpoint la ricerca su un oggetto UdpDiscoveryEndpoint per impostazione predefinita. Una volta individuato un endpoint di servizio, il client si connette a tale servizio tramite l'associazione specificata.

public static void Main()
{
   DynamicEndpoint dynamicEndpoint = new DynamicEndpoint( ContractDescription.GetContract(typeof(ICalculatorService)), new WSHttpBinding());
   // ...
}

Il client definisce un metodo denominato InvokeCalculatorService che usa la DiscoveryClient classe per cercare i servizi. DynamicEndpoint eredita da ServiceEndpoint, quindi può essere passato al metodo InvokeCalculatorService. Nell'esempio viene quindi utilizzato DynamicEndpoint per creare un'istanza di CalculatorServiceClient e chiamare le varie operazioni del servizio della calcolatrice.

static void InvokeCalculatorService(ServiceEndpoint serviceEndpoint)
{
   // Create a client
   CalculatorServiceClient client = new CalculatorServiceClient(serviceEndpoint);

   Console.WriteLine("Invoking CalculatorService");
   Console.WriteLine();

   double value1 = 100.00D;
   double value2 = 15.99D;

   // Call the Add service operation.
   double result = client.Add(value1, value2);
   Console.WriteLine("Add({0},{1}) = {2}", value1, value2, result);

   // Call the Subtract service operation.
   result = client.Subtract(value1, value2);
   Console.WriteLine("Subtract({0},{1}) = {2}", value1, value2, result);

   // Call the Multiply service operation.
   result = client.Multiply(value1, value2);
   Console.WriteLine("Multiply({0},{1}) = {2}", value1, value2, result);

   // Call the Divide service operation.
   result = client.Divide(value1, value2);
   Console.WriteLine("Divide({0},{1}) = {2}", value1, value2, result);
   Console.WriteLine();

   //Closing the client gracefully closes the connection and cleans up resources
   client.Close();
}

Per usare questo esempio

  1. Questo esempio usa endpoint HTTP e per eseguire questo esempio è necessario aggiungere gli ACL URL appropriati. Per altre informazioni, vedere Configurazione di HTTP e HTTPS. L'esecuzione del seguente comando con privilegi elevati dovrebbe aggiungere le ACL appropriate. È possibile sostituire il dominio e il nome utente per gli argomenti seguenti se il comando non funziona così com'è. netsh http add urlacl url=http://+:8000/ user=%DOMAIN%\%UserName%

  2. Usando Visual Studio, aprire il Basic.sln e compilare l'esempio.

  3. Eseguire l'applicazione service.exe.

  4. Dopo l'avvio del servizio, avvia il client.exe.

  5. Osservare che il client è riuscito a trovare il servizio senza conoscerne l'indirizzo.