Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Después de crear un servicio, el siguiente paso es crear un proxy de cliente WCF. Una aplicación cliente usa el proxy de cliente WCF para comunicarse con el servicio. Las aplicaciones cliente suelen importar los metadatos de un servicio para generar código de cliente WCF que se puede usar para invocar el servicio.
Los pasos básicos para crear un cliente WCF incluyen lo siguiente:
Compile el código de servicio.
Genere el proxy de cliente WCF.
Cree una instancia del proxy de cliente de WCF.
El proxy de cliente WCF se puede generar manualmente mediante la Herramienta de utilidad de metadatos del modelo de servicio (SvcUtil.exe) para obtener más información, vea ServiceModel Metadata Utility Tool (Svcutil.exe). El proxy de cliente WCF también se puede generar en Visual Studio mediante la característica Agregar referencia de servicio . Para generar el proxy del cliente WCF utilizando cualquiera de los métodos, el servicio debe estar ejecutándose. Si el servicio está autohospedado, debe gestionar el servidor. Si el servicio se hospeda en IIS/WAS, no es necesario hacer nada más.
Herramienta de Utilidad de Metadatos de ServiceModel
ServiceModel Metadata Utility Tool (Svcutil.exe) es una herramienta de línea de comandos para generar código a partir de metadatos. El uso siguiente es un ejemplo de un comando básico Svcutil.exe.
Svcutil.exe <service's Metadata Exchange (MEX) address or HTTP GET address>
Como alternativa, puede usar Svcutil.exe con archivos de lenguaje de descripción de servicios web (WSDL) y 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 cliente puede usar para invocar el servicio.
También puede usar la herramienta para generar archivos de configuración.
Svcutil.exe <file1 [,file2]>
Si solo se proporciona un nombre de archivo, es el nombre del archivo de salida. Si se proporcionan dos nombres de archivo, el primer archivo es un archivo de configuración de entrada cuyo contenido se combina con la configuración generada y se escribe en el segundo archivo. Para obtener más información sobre la configuración, consulte Configuración de vinculaciones para servicios.
Importante
Las solicitudes de metadatos no seguras suponen ciertos riesgos de la misma manera que cualquier solicitud de red no segura: si no está seguro de que el punto de conexión con el que se comunica es con quién dice que es, la información que recupera podría ser metadatos de un servicio malintencionado.
Agregar referencia de servicio en Visual Studio
Con el servicio en ejecución, haga clic con el botón derecho en el proyecto que contendrá el proxy de cliente WCF y seleccione Agregar>referencia de servicio. En el cuadro de diálogo Agregar referencia de servicio, escriba la dirección URL al servicio al que desea llamar y haga clic en el botón Ir . El cuadro de diálogo mostrará una lista de servicios disponibles en la dirección que especifique. Haga doble clic en el servicio para ver los contratos y las operaciones disponibles, especifique un espacio de nombres para el código generado y haga clic en el botón Aceptar .
Ejemplo
En el ejemplo de código siguiente se 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 metadatos de ServiceModel y Agregar referencia de servicio en Visual Studio genera la siguiente clase de cliente WCF. La clase hereda de la clase genérica ClientBase<TChannel> e implementa la ICalculator
interfaz . La herramienta también genera la ICalculator
interfaz (no se muestra aquí).
public partial class CalculatorClient : System.ServiceModel.ClientBase<ICalculator>, ICalculator
{
public CalculatorClient()
{}
public CalculatorClient(string endpointConfigurationName) :
base(endpointConfigurationName)
{}
public CalculatorClient(string endpointConfigurationName, string remoteAddress) :
base(endpointConfigurationName, remoteAddress)
{}
public CalculatorClient(string endpointConfigurationName,
System.ServiceModel.EndpointAddress remoteAddress) :
base(endpointConfigurationName, remoteAddress)
{}
public CalculatorClient(System.ServiceModel.Channels.Binding binding,
System.ServiceModel.EndpointAddress remoteAddress) :
base(binding, remoteAddress)
{}
public double Add(double n1, double n2)
{
return base.Channel.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 endpointConfigurationName As String)
MyBase.New(endpointConfigurationName)
End Sub
Public Sub New(ByVal endpointConfigurationName As String, ByVal remoteAddress As String)
MyBase.New(endpointConfigurationName, remoteAddress)
End Sub
Public Sub New(ByVal endpointConfigurationName As String,
ByVal remoteAddress As System.ServiceModel.EndpointAddress)
MyBase.New(endpointConfigurationName, remoteAddress)
End Sub
Public Sub New(ByVal binding As System.ServiceModel.Channels.Binding,
ByVal remoteAddress As System.ServiceModel.EndpointAddress)
MyBase.New(binding, remoteAddress)
End Sub
Public Function Add(ByVal n1 As Double, ByVal n2 As Double) As Double
Implements ICalculator.Add
Return MyBase.Channel.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, 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 excepciones producidas por un cliente WCF se deben a una excepción en el servicio. A continuación se indican algunos ejemplos:
SocketException: el host remoto cerró forzadamente una conexión existente.
CommunicationException: la conexión subyacente se cerró inesperadamente.
CommunicationObjectAbortedException: se anuló la conexión de socket. Esto puede deberse a un error al procesar el mensaje, a que el host remoto supera el tiempo de espera de recepción o un problema de recurso 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 ha producido allí. Para obtener más información sobre el seguimiento, consulte Seguimiento y uso del seguimiento para solucionar problemas de la aplicación.
Consulte también
- Cómo: Crear un cliente
- Cómo: Acceder a servicios con un contrato dúplex
- Procedimiento: Llamar a operaciones del servicio WCF de forma asincrónica
- Cómo: Acceder a servicios con contratos de One-Way y Request-Reply
- Acceso a un servicio WSE 3.0
- Descripción del código de cliente generado
- Cómo: Mejorar el tiempo de inicio de las aplicaciones cliente WCF mediante XmlSerializer
- Especificación del comportamiento del cliente Run-Time
- Configuración de los comportamientos del cliente