Creación de un cliente de Windows Communication Foundation
Ésta es la cuarta de las seis tareas que son necesarias para crear un servicio de Windows Communication Foundation (WCF) básico y un cliente que puede llamar al servicio. Para obtener información general de las seis tareas, vea el tema Tutorial de introducción.
En este tema se describe cómo se pueden recuperar metadatos desde un servicio WCF y usarlos para crear un proxy WCF que pueda obtener acceso al servicio. Esta tarea se completa con ayuda de la Herramienta de utilidad de metadatos de ServiceModel (Svcutil.exe) que WCF proporciona. Esta herramienta obtiene los metadatos del servicio y genera un archivo de código fuente administrado para un proxy en el lenguaje elegido. Además de crear el proxy de cliente, la herramienta también crea el archivo de configuración para el cliente que permite que la aplicación cliente se conecte al servicio en uno de sus extremos.
Nota: |
---|
Puede agregar una referencia de servicio al proyecto de cliente en Visual Studio 2010 para crear el proxy de cliente en lugar de usar la Herramienta de utilidad de metadatos de ServiceModel (Svcutil.exe). |
Precaución: |
---|
Cuando se llama a un servicio de WCF desde un proyecto de biblioteca de clases de Visual Studio 2010 puede usar la característica Agregar referencia de servicio para generar automáticamente un proxy y el archivo de configuración asociado. El archivo de configuración no lo usará el proyecto de biblioteca de clases. Deberá copiar el archivo de configuración en el directorio que contenga el ejecutable que llamará a la biblioteca de clases. |
La aplicación cliente usa el proxy generado para crear un objeto de cliente de WCF. Este procedimiento se describe en Cómo usar un cliente de Windows Communication Foundation.
El código del cliente generado por esta tarea se proporciona en el ejemplo que sigue el procedimiento.
Creación de un cliente de Windows Communication Foundation
Siga estos pasos para crear en la solución actual un nuevo proyecto para el cliente en Visual Studio 2010:
En el Explorador de soluciones (en la esquina superior derecha) de la misma solución que contiene el servicio, haga clic con el botón secundario en la solución actual (no el proyecto) y seleccione Agregar y, a continuación, Nuevo proyecto.
En el cuadro de diálogo Agregar nuevo proyecto, seleccione Visual Basic o **Visual C#**y elija la plantilla Aplicación de consola y denomínela Cliente. Utilice la ubicación predeterminada.
Haga clic en Aceptar.
Agregue una referencia a System.ServiceModel.dll para el proyecto:
Haga clic con el botón secundario en la carpeta Referencias del proyecto Cliente en el Explorador de soluciones y seleccione Agregar referencia.
Seleccione la pestaña .NET, elija System.ServiceModel.dll (versión 4.0.0.0) en el cuadro de lista y haga clic en Aceptar.
Nota: Al utilizar un compilador de línea de comandos (como, por ejemplo, Csc.exe o Vbc.exe), también debe proporcionar la ruta de acceso a los ensamblados. De forma predeterminada, en un equipo que ejecuta, por ejemplo, Windows Vista, la ruta de acceso es Windows\Microsoft.NET\Framework\v4.0. Agregue una instrucción
using
(Imports
en Visual Basic) para el espacio de nombres System.ServiceModel en el archivo Program.cs o Program.vb generado.Imports System.ServiceModel
using System.ServiceModel;
En Visual Studio, presione la tecla F5 para iniciar el servicio creado en el tema anterior. Para obtener más información, vea Procedimiento para hospedar y ejecutar un servicio básico de Windows Communication Foundation.
Ejecute la Herramienta de utilidad de metadatos de ServiceModel (Svcutil.exe) con los modificadores adecuados para crear el código de cliente y un archivo de configuración realizando los siguientes pasos:
En el menú Inicio, haga clic en Todos los programas y, a continuación, en Visual Studio 2010. Haga clic en Visual Studio Tools y, a continuación, en Símbolo del sistema de Visual Studio 2010.
Explore hasta el directorio donde desea colocar el código de cliente. Si creó el proyecto de cliente con la configuración predeterminada, el directorio es C:\Users\<nombre de usuario>\My Documents\Visual Studio 10\Projects\Service\Client.
Utilice la herramienta de línea de comandos Herramienta de utilidad de metadatos de ServiceModel (Svcutil.exe) con los modificadores adecuados para crear el código de cliente. El siguiente ejemplo genera un archivo de código y un archivo de configuración para el servicio.
svcutil.exe /language:vb /out:generatedProxy.vb /config:app.config https://localhost:8000/ServiceModelSamples/service
svcutil.exe /language:cs /out:generatedProxy.cs /config:app.config https://localhost:8000/ServiceModelSamples/service
De forma predeterminada, el código de proxy de cliente se genera en un archivo con nombre después del servicio (en este caso, por ejemplo, CalculatorService.cs o CalculatorService.vb) con una extensión adecuada al lenguaje de programación: .vb para Visual Basic o .cs para C#). El modificador /out cambia el nombre del archivo proxy de cliente a GeneratedProxy.cs. El modificador /config cambia el nombre predeterminado del archivo de configuración de cliente, Output.config, por App.config. Observe que los dos archivos se generan en el directorio C:\Users\<nombre de usuario>\My Documents\Visual Studio 10\Projects\Service\Client.
Agregue el proxy generado al proyecto de cliente en Visual Studio, haga clic con el botón secundario en el proyecto de cliente en el Explorador de soluciones, y seleccione Agregar y Elemento existente. Seleccione el archivo generatedProxy generado en el paso anterior.
Ejemplo
Este ejemplo muestra el código de cliente generado por la Herramienta de utilidad de metadatos de ServiceModel (Svcutil.exe).
'------------------------------------------------------------------------------
' <auto-generated>
' This code was generated by a tool.
' Runtime Version:2.0.50727.1366
'
' Changes to this file may cause incorrect behavior and will be lost if
' the code is regenerated.
' </auto-generated>
'------------------------------------------------------------------------------
Option Strict Off
Option Explicit On
<System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0"), _
System.ServiceModel.ServiceContractAttribute([Namespace]:="http://Microsoft.ServiceModel.Samples", ConfigurationName:="ICalculator")> _
Public Interface ICalculator
<System.ServiceModel.OperationContractAttribute(Action:="http://Microsoft.ServiceModel.Samples/ICalculator/Add", ReplyAction:="http://Microsoft.ServiceModel.Samples/ICalculator/AddResponse")> _
Function Add(ByVal n1 As Double, ByVal n2 As Double) As Double
<System.ServiceModel.OperationContractAttribute(Action:="http://Microsoft.ServiceModel.Samples/ICalculator/Subtract", ReplyAction:="http://Microsoft.ServiceModel.Samples/ICalculator/SubtractResponse")> _
Function Subtract(ByVal n1 As Double, ByVal n2 As Double) As Double
<System.ServiceModel.OperationContractAttribute(Action:="http://Microsoft.ServiceModel.Samples/ICalculator/Multiply", ReplyAction:="http://Microsoft.ServiceModel.Samples/ICalculator/MultiplyResponse")> _
Function Multiply(ByVal n1 As Double, ByVal n2 As Double) As Double
<System.ServiceModel.OperationContractAttribute(Action:="http://Microsoft.ServiceModel.Samples/ICalculator/Divide", ReplyAction:="http://Microsoft.ServiceModel.Samples/ICalculator/DivideResponse")> _
Function Divide(ByVal n1 As Double, ByVal n2 As Double) As Double
End Interface
<System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")> _
Public Interface ICalculatorChannel
Inherits ICalculator, System.ServiceModel.IClientChannel
End Interface
<System.Diagnostics.DebuggerStepThroughAttribute(), _
System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")> _
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
Public Function Subtract(ByVal n1 As Double, ByVal n2 As Double) As Double Implements ICalculator.Subtract
Return MyBase.Channel.Subtract(n1, n2)
End Function
Public Function Multiply(ByVal n1 As Double, ByVal n2 As Double) As Double Implements ICalculator.Multiply
Return MyBase.Channel.Multiply(n1, n2)
End Function
Public Function Divide(ByVal n1 As Double, ByVal n2 As Double) As Double Implements ICalculator.Divide
Return MyBase.Channel.Divide(n1, n2)
End Function
End Class
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:2.0.50727.1366
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")]
[System.ServiceModel.ServiceContractAttribute(Namespace="http://Microsoft.ServiceModel.Samples", ConfigurationName="ICalculator")]
public interface ICalculator
{
[System.ServiceModel.OperationContractAttribute(Action="http://Microsoft.ServiceModel.Samples/ICalculator/Add", ReplyAction="http://Microsoft.ServiceModel.Samples/ICalculator/AddResponse")]
double Add(double n1, double n2);
[System.ServiceModel.OperationContractAttribute(Action="http://Microsoft.ServiceModel.Samples/ICalculator/Subtract", ReplyAction="http://Microsoft.ServiceModel.Samples/ICalculator/SubtractResponse")]
double Subtract(double n1, double n2);
[System.ServiceModel.OperationContractAttribute(Action="http://Microsoft.ServiceModel.Samples/ICalculator/Multiply", ReplyAction="http://Microsoft.ServiceModel.Samples/ICalculator/MultiplyResponse")]
double Multiply(double n1, double n2);
[System.ServiceModel.OperationContractAttribute(Action="http://Microsoft.ServiceModel.Samples/ICalculator/Divide", ReplyAction="http://Microsoft.ServiceModel.Samples/ICalculator/DivideResponse")]
double Divide(double n1, double n2);
}
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")]
public interface ICalculatorChannel : ICalculator, System.ServiceModel.IClientChannel
{
}
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")]
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);
}
public double Subtract(double n1, double n2)
{
return base.Channel.Subtract(n1, n2);
}
public double Multiply(double n1, double n2)
{
return base.Channel.Multiply(n1, n2);
}
public double Divide(double n1, double n2)
{
return base.Channel.Divide(n1, n2);
}
}
Ahora ha creado un cliente Windows Communication Foundation (WCF). Continúe en el tema Configuración de un cliente básico de Windows Communication Foundation para configurar el cliente. Para obtener más información, vea Solución de problemas con el tutorial de introducción.
Vea también
Tareas
Ejemplo de introducción
Autohospedaje
Cómo publicar metadatos para un servicio mediante un archivo de configuración
Cómo: Utilizar Svcutil.exe para descargar los documentos de metadatos
Conceptos
Herramienta de utilidad de metadatos de ServiceModel (Svcutil.exe)