Acceso a los servicios mediante un cliente WCF
Después de crear un servicio, el paso siguiente es crear un cliente WCF. Una aplicación de cliente usa el cliente WCF para comunicarse con el servicio. Las aplicaciones de cliente suelen importar los metadatos de un servicio para generar el código de cliente WCF que se puede usar para invocar el servicio.
Los pasos básicos para crear un cliente WCF son los siguientes:
Compilar el código del servicio.
Usar Herramienta de utilidad de metadatos de ServiceModel (Svcutil.exe) para crear el cliente WCF.
Herramienta de utilidad de metadatos ServiceModel
Herramienta de utilidad de metadatos de ServiceModel (Svcutil.exe) es una herramienta de línea de comandos para generar código a partir de metadatos. A continuación se muestra un ejemplo del uso de un comando básico Svcutil.exe.
Svcutil.exe <service's Metadata Exchange (MEX) address or HTTP GET address>
Alternativamente, puede usar Svcutil.exe con Web Services Description Language (WSDL) y archivos de lenguaje de definición de esquemas XML (XSD) en el sistema de archivos.
Svcutil.exe <list of WSDL and XSD files on file system>
El resultado es un archivo de código que contiene código de cliente WCF que la aplicación de cliente puede usar para invocar el servicio.
También puede usar la herramienta para generar archivos de configuración.
Svcutil.exe <file1 [,file2]>
Si se proporciona solo uno nombre de archivo, ése será el nombre del archivo de salida. Si se proporcionan dos nombres de archivo, entonces el primer archivo es un archivo de configuración de entrada cuyo contenido está combinado con la configuración generada y que se escribe en el segundo archivo. Configuración Para obtener más información sobre , consulte Configuración de enlaces para servicios Windows Communication Foundation.
Nota: |
---|
Las solicitudes de metadatos que no son seguras plantean ciertos riesgos, al igual que cualquier solicitud de una red no segura: si no está seguro de que el extremo con el que se está comunicando es el que dice ser, es posible que la información que recupere sean metadatos de un servicio malintencionado. |
Ejemplo
El ejemplo de código siguiente muestra un contrato de servicio creado para un servicio.
// Define a service contract.
[ServiceContract(Namespace="http://Microsoft.ServiceModel.Samples")]
public interface ICalculator
{
[OperationContract]
double Add(double n1, double n2);
// Other methods are not shown here.
}
' Define a service contract.
<ServiceContract(Namespace="http://Microsoft.ServiceModel.Samples")> _
Public Interface ICalculator
<OperationContract()> _
Function Add(ByVal n1 As Double, ByVal n2 As Double) As Double
' Other methods are not shown here.
End Interface
La herramienta de utilidades de metadatos de ServiceModel genera la clase de cliente WCF siguiente. La clase adquiere de la clase ClientBase genérica e implementa la interfaz ICalculator
. La herramienta también genera la interfaz (no se muestra aquí) ICalculator
.
public partial class CalculatorClient : System.ServiceModel.ClientBase<ICalculator>, ICalculator
{
public CalculatorClient(){}
public CalculatorClient(string configurationName) :
base(configurationName)
{}
public CalculatorClient(System.ServiceModel.Binding binding) :
base(binding)
{}
public CalculatorClient(System.ServiceModel.EndpointAddress address,
System.ServiceModel.Binding binding) :
base(address, binding)
{}
public double Add(double n1, double n2)
{
return base.InnerChannel.Add(n1, n2);
}
}
Partial Public Class CalculatorClient
Inherits System.ServiceModel.ClientBase(Of ICalculator)
Implements ICalculator
Public Sub New()
MyBase.New
End Sub
Public Sub New(ByVal configurationName As String)
MyBase.New(configurationName)
End Sub
Public Sub New(ByVal binding As System.ServiceModel.Binding)
MyBase.New(binding)
End Sub
Public Sub New(ByVal address As _
System.ServiceModel.EndpointAddress, _
ByVal binding As System.ServiceModel.Binding)
MyBase.New(address, binding)
End Sub
Public Function Add(ByVal n1 As Double, ByVal n2 As Double) As _
Double Implements ICalculator.Add
Return MyBase.InnerChannel.Add(n1, n2)
End Function
End Class
Uso del cliente WCF
Para usar el cliente WCF, cree una instancia del cliente WCF y, a continuación, llame a sus métodos, tal y como se muestra en el código siguiente.
// Create a client object with the given client endpoint configuration.
CalculatorClient calcClient = new CalculatorClient("CalculatorEndpoint"));
// Call the Add service operation.
double value1 = 100.00D;
double value2 = 15.99D;
double result = calcClient.Add(value1, value2);
Console.WriteLine("Add({0},{1}) = {2}", value1, value2, result);
' Create a client object with the given client endpoint configuration.
Dim calcClient As CalculatorClient = _
New CalculatorClient("CalculatorEndpoint")
' Call the Add service operation.
Dim value1 As Double = 100.00D
Dim value2 As Double = 15.99D
Dim result As Double = calcClient.Add(value1, value2)
Console.WriteLine("Add({0},{1}) = {2}", value1, value2, result)
Depuración de las excepciones iniciadas por un cliente
Muchas de las excepciones iniciadas por un cliente WCF tienen su origen en una excepción del servicio. Estos son algunos ejemplos:
SocketException: el host remoto forzó el cierre de la conexión existente.
CommunicationException: la conexión ha terminado de forma inesperada.
CommunicationObjectAbortedException: se anuló la conexión de socket. La causa puede ser un error en el procesamiento del mensaje, que se superó el tiempo de espera de recepción en el host remoto, o bien un problema de recursos de red subyacente.
Cuando se producen estos tipos de excepciones, la mejor manera de resolver el problema es activar el seguimiento en el lado del servicio y determinar qué excepción se produjo allí. Para obtener más información sobre el seguimiento, consulte Seguimiento y Uso del seguimiento para solucionar problemas de su aplicación.
Vea también
Tareas
Creación de un cliente de Windows Communication Foundation
Cómo: Obtener acceso a los servicios con un contrato dúplex
Cómo llamar a operaciones del servicio WCF de forma asincrónica
Cómo: Obtener acceso a los servicios WCF con contratos unidireccionales y de solicitud-respuesta
Cómo: Obtener acceso al servicio WSE 3.0 con un cliente WCF
Cómo: Mejorar el tiempo de inicio de las aplicaciones cliente WCF mediante XmlSerializer
Conceptos
Comprender códigos de cliente generado
Especificación del comportamiento de tiempo de ejecución del cliente
Configuración de los comportamientos del cliente