Partilhar via


Amostra básica

O Exemplo de descoberta básica mostra como tornar um serviço detetável e como procurar e chamar um serviço detetável. Esta amostra é composta por dois projetos: serviço e cliente.

Nota

Este exemplo implementa a descoberta no código. Para obter um exemplo que implementa a descoberta na configuração, consulte Configuração.

Serviço

Esta é uma implementação de serviço de calculadora simples. O código relacionado à descoberta pode ser encontrado no Main local em que a ServiceDiscoveryBehavior é adicionado ao host de serviço e a UdpDiscoveryEndpoint é adicionado, conforme mostrado no código a seguir.

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

O cliente usa um DynamicEndpoint para localizar o serviço. O DynamicEndpoint, um ponto de extremidade padrão, resolve o ponto de extremidade do serviço quando o cliente é aberto. Neste caso, o DynamicEndpoint procura o serviço com base no contrato de serviço. O DynamicEndpoint conduz a pesquisa sobre um UdpDiscoveryEndpoint por padrão. Depois de localizar um ponto de extremidade de serviço, o cliente se conecta a esse serviço por meio da associação especificada.

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

O cliente define um método chamado InvokeCalculatorService que usa a DiscoveryClient classe para procurar serviços. O DynamicEndpoint herda de ServiceEndpoint, para que possa ser passado para o InvokeCalculatorService método. O exemplo, em seguida, usa o DynamicEndpoint para criar uma instância de CalculatorServiceClient e chama as várias operações do serviço de calculadora.

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

Para usar este exemplo

  1. Este exemplo usa pontos de extremidade HTTP e, para executá-lo, ACLs de URL adequadas devem ser adicionadas. Para obter mais informações, consulte Configurando HTTP e HTTPS. A execução do comando a seguir com um privilégio elevado deve adicionar as ACLs apropriadas. Você pode querer substituir seu domínio e nome de usuário para os seguintes argumentos se o comando não funcionar como está. netsh http add urlacl url=http://+:8000/ user=%DOMAIN%\%UserName%

  2. Usando o Visual Studio, abra o Basic.sln e crie o exemplo.

  3. Execute o aplicativo service.exe.

  4. Depois que o serviço for iniciado, execute o client.exe.

  5. Observe que o cliente conseguiu encontrar o serviço sem saber o seu endereço.