Compartir a través de


Ejemplo básico

En el ejemplo de detección básica se muestra cómo hacer que un servicio sea reconocible y cómo buscar y llamar a un servicio reconocible. Este ejemplo se compone de dos proyectos: servicio y cliente.

Nota:

En este ejemplo se implementa la detección en el código. Para obtener un ejemplo que implemente la detección en la configuración, consulte Configuración.

Servicio

Se trata de una implementación sencilla del servicio de calculadora. El código relacionado con la detección se puede encontrar en Main donde se agrega ServiceDiscoveryBehavior al host de servicio, y UdpDiscoveryEndpoint se añade como se muestra en el siguiente código.

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

El cliente usa un DynamicEndpoint para localizar el servicio. El DynamicEndpoint, un punto de conexión estándar, determina el punto de conexión del servicio cuando se abre el cliente. En este caso, DynamicEndpoint busca el servicio en función del contrato de servicio. El DynamicEndpoint realiza la búsqueda a través de un UdpDiscoveryEndpoint de forma predeterminada. Una vez localizado un punto de conexión de servicio, el cliente se conecta a ese servicio a través del enlace especificado.

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

El cliente define un método llamado InvokeCalculatorService que usa la DiscoveryClient clase para buscar servicios. DynamicEndpoint hereda de ServiceEndpoint, por lo que se puede pasar al método InvokeCalculatorService. A continuación, el ejemplo usa DynamicEndpoint para crear una instancia de CalculatorServiceClient y llama a las distintas operaciones del servicio 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 utilizar este ejemplo

  1. En este ejemplo se usan puntos de conexión HTTP y para ejecutar este ejemplo, se deben agregar ACL de dirección URL adecuadas. Para obtener más información, consulte Configuración de HTTP y HTTPS. Al ejecutar el siguiente comando con privilegios elevados, debe agregar las ACL adecuadas. Es posible que quiera sustituir el dominio y el nombre de usuario por los argumentos siguientes si el comando no funciona tal como está. netsh http add urlacl url=http://+:8000/ user=%DOMAIN%\%UserName%

  2. Con Visual Studio, abra el Basic.sln y compile el ejemplo.

  3. Ejecute la aplicación service.exe.

  4. Una vez iniciado el servicio, ejecute el client.exe.

  5. Observe que el cliente pudo encontrar el servicio sin conocer su dirección.