Compartir a través de


Ejemplo básico

En este ejemplo se muestra cómo hacer que un servicio se pueda detectar y cómo buscar y llamar a un servicio detectable. Este ejemplo se compone de dos proyectos: servicio y cliente.

Dd483369.note(es-es,VS.100).gifNota:
En él se implementa la detección en el código. Para obtener un ejemplo que implementa la detección en la configuración, vea Ejemplo de configuración.

Servicio

Se trata de la implementación de un servicio de calculadora sencillo. El código relacionado con la detección se puede encontrar en Main donde un objeto ServiceDiscoveryBehavior se agrega al host del servicio y un objeto UdpDiscoveryEndpoint se agrega 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 objeto DynamicEndpoint para localizar el servicio. El DynamicEndpoint, un extremo estándar, resuelve el extremo del servicio cuando se abre el cliente. En este caso, el DynamicEndpoint busca el servicio según el contrato de servicio. El DynamicEndpoint realiza la búsqueda a través de un UdpDiscoveryEndpoint de forma predeterminada. Cuando localiza un extremo 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 denominado InvokeCalculatorService que utiliza la clase DiscoveryClient para buscar servicios. DynamicEndpoint hereda de ServiceEndpoint, de modo que se pueda pasar al método InvokeCalculatorService. A continuación, el ejemplo utiliza DynamicEndpoint para crear una instancia de CalculatorServiceClient y llama a diversas 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. Este ejemplo utiliza los extremos HTTP y para ejecutarlo, se deben agregar las ACL de dirección URL apropiadas. Para obtener más información, vea Configurar HTTP y HTTPS. Al ejecutar el siguiente comando con privilegios elevados, se deberían agregar las ACL adecuadas. Puede que desee sustituir su dominio y nombre de usuario para los siguientes argumentos si el comando no funciona como debería. netsh http add urlacl url=http://+:8000/ user=%DOMAIN%\%UserName%

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

  3. Ejecute la aplicación service.exe.

  4. Después de que se inicie el servicio, ejecute la aplicación client.exe.

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

Dd483369.Important(es-es,VS.100).gif Nota:
Puede que los ejemplos ya estén instalados en su equipo. Compruebe el siguiente directorio (valor predeterminado) antes de continuar.

<InstallDrive>:\WF_WCF_Samples

Si no existe este directorio, vaya a la página de ejemplos de Windows Communication Foundation (WCF) y Windows Workflow Foundation (WF) Samples para .NET Framework 4 para descargar todos los ejemplos de WF y Windows Communication Foundation (WCF). Este ejemplo se encuentra en el siguiente directorio.

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