Partekatu bidez


Descripción del servicio

El ejemplo ServiceDescription muestra cómo un servicio puede recuperar su información de descripción del servicio en tiempo de ejecución. El ejemplo se basa en la Guía de inicio, con una operación de servicio adicional definida para devolver información descriptiva sobre el servicio. La información que se devuelve enumera las direcciones base y los puntos de conexión del servicio. El servicio proporciona esta información mediante las OperationContextclases , ServiceHosty ServiceDescription .

En este ejemplo, el cliente es una aplicación de consola (.exe) y los Servicios de Internet Information Server (IIS) hospedan el servicio.

Nota:

El procedimiento de instalación y las instrucciones de compilación de este ejemplo se encuentran al final de este tema.

Este ejemplo tiene una versión modificada del contrato de calculadora denominada IServiceDescriptionCalculator. El contrato define una operación de servicio adicional denominada GetServiceDescriptionInfo que devuelve una cadena de varias líneas al cliente que describe la dirección base o las direcciones y los puntos de conexión de servicio o puntos de conexión del servicio.

[ServiceContract(Namespace="http://Microsoft.ServiceModel.Samples")]
public interface IServiceDescriptionCalculator
{
    [OperationContract]
    int Add(int n1, int n2);
    [OperationContract]
    int Subtract(int n1, int n2);
    [OperationContract]
    int Multiply(int n1, int n2);
    [OperationContract]
    int Divide(int n1, int n2);
    [OperationContract]
    string GetServiceDescriptionInfo();
}

El código de implementación para GetServiceDescriptionInfo usa el ServiceDescription para enumerar los puntos de conexión de servicio. Dado que los puntos de conexión de servicio pueden tener direcciones relativas, primero enumera las direcciones base del servicio. Para obtener toda esta información, el código obtiene su contexto de operación mediante Current. El ServiceHost y su objeto ServiceDescription se recuperan del contexto de la operación. Para hacer una lista de los puntos de conexión base para el servicio, el código recorre en iteración la colección BaseAddresses del host del servicio. Para enumerar los puntos de conexión de servicio del servicio, el código recorre en iteración la colección de puntos de conexión de la descripción del servicio.

public string GetServiceDescriptionInfo()
{
    string info = "";
    OperationContext operationContext = OperationContext.Current;
    ServiceHost host = (ServiceHost)operationContext.Host;
    ServiceDescription desc = host.Description;
    // Enumerate the base addresses in the service host.
    info += "Base addresses:\n";
    foreach (Uri uri in host.BaseAddresses)
    {
        info += "    " + uri + "\n";
    }
    // Enumerate the service endpoints in the service description.
    info += "Service endpoints:\n";
    foreach (ServiceEndpoint endpoint in desc.Endpoints)
    {
        info += "    Address:  " + endpoint.Address + "\n";
        info += "    Binding:  " + endpoint.Binding.Name + "\n";
        info += "    Contract: " + endpoint.Contract.Name + "\n";
    }
     return info;
}

Al ejecutar el ejemplo, verá las operaciones de la calculadora y, a continuación, la información del servicio devuelta por la GetServiceDescriptionInfo operación. Presione ENTRAR en la ventana del cliente para apagar el cliente.

Add(15,3) = 18
Subtract(145,76) = 69
Multiply(9,81) = 729
Divide(22,7) = 3
GetServiceDescriptionInfo
Base addresses:
    http://<machine-name>/ServiceModelSamples/service.svc
    https://<machine-name>/ServiceModelSamples/service.svc
Service endpoints:
    Address:  http://<machine-name>/ServiceModelSamples/service.svc
    Binding:  WSHttpBinding
    Contract: IServiceDescriptionCalculator
    Address:  http://<machine-name>/ServiceModelSamples/service.svc/mex
    Binding:  MetadataExchangeHttpBinding
    Contract: IMetadataExchange

Press <ENTER> to terminate client.

Para configurar, compilar y ejecutar el ejemplo

  1. Asegúrese de que ha realizado el procedimiento de instalación única para los ejemplos de Windows Communication Foundation.

  2. Para compilar el código C# o Visual Basic .NET Edition de la solución, siga las instrucciones de Building the Windows Communication Foundation Samples.

  3. Para ejecutar el ejemplo en una configuración de una máquina única o entre máquinas, siga las instrucciones de Ejecución de los ejemplos de Windows Communication Foundation.