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.
En el ejemplo GettingStarted se muestra cómo implementar un servicio típico y un cliente típico mediante Windows Communication Foundation (WCF). Este ejemplo es la base de todos los demás ejemplos de tecnología básica.
Nota:
El procedimiento de instalación y las instrucciones de compilación de este ejemplo se encuentran al final de este tema.
El servicio describe las operaciones que realiza en un contrato de servicio que expone públicamente como metadatos. El servicio también contiene el código para implementar las operaciones.
El cliente contiene una definición del contrato de servicio y una clase de proxy para acceder al servicio. El código proxy se genera a partir de los metadatos del servicio mediante la Herramienta de utilidad de metadatos serviceModel (Svcutil.exe).
En Windows Vista, el servicio se hospeda en el servicio de activación de Windows (WAS). En Windows XP y Windows Server 2003, se hospeda en Internet Information Services (IIS) y ASP.NET. Hospedar un servicio en IIS o WAS permite que el servicio se active automáticamente cuando se accede por primera vez.
Nota:
Si prefiere empezar a trabajar con un ejemplo que hospeda el servicio en una aplicación de consola en lugar de IIS, consulte el ejemplo de autohospedar .
El servicio y el cliente especifican los detalles de acceso en la configuración del archivo de configuración, lo que proporciona flexibilidad en el momento de la implementación. Esto incluye una definición de punto de conexión que especifica una dirección, un enlace y un contrato. El enlace especifica el transporte y los detalles de seguridad sobre cómo se tiene acceso al servicio.
El servicio configura un comportamiento en tiempo de ejecución para publicar sus metadatos.
El servicio implementa un contrato que define un patrón de comunicación de solicitud-respuesta. El contrato se define mediante la ICalculator
interfaz , que expone las operaciones matemáticas (agregar, restar, multiplicar y dividir). El cliente realiza solicitudes a una operación matemática determinada y el servicio responde con el resultado. El servicio implementa un ICalculator
contrato definido en el código siguiente.
' Define a service contract.
<ServiceContract(Namespace:="http://Microsoft.Samples.GettingStarted")>
Public Interface ICalculator
<OperationContract()>
Function Add(ByVal n1 As Double, ByVal n2 As Double) As Double
<OperationContract()>
Function Subtract(ByVal n1 As Double, ByVal n2 As Double) As Double
<OperationContract()>
Function Multiply(ByVal n1 As Double, ByVal n2 As Double) As Double
<OperationContract()>
Function Divide(ByVal n1 As Double, ByVal n2 As Double) As Double
End Interface
// Define a service contract.
[ServiceContract(Namespace="http://Microsoft.ServiceModel.Samples")]
public interface ICalculator
{
[OperationContract]
double Add(double n1, double n2);
[OperationContract]
double Subtract(double n1, double n2);
[OperationContract]
double Multiply(double n1, double n2);
[OperationContract]
double Divide(double n1, double n2);
}
La implementación del servicio calcula y devuelve el resultado adecuado, como se muestra en el código de ejemplo siguiente.
' Service class which implements the service contract.
Public Class CalculatorService
Implements ICalculator
Public Function Add(ByVal n1 As Double, ByVal n2 As Double) As Double Implements ICalculator.Add
Return n1 + n2
End Function
Public Function Subtract(ByVal n1 As Double, ByVal n2 As Double) As Double Implements ICalculator.Subtract
Return n1 - n2
End Function
Public Function Multiply(ByVal n1 As Double, ByVal n2 As Double) As Double Implements ICalculator.Multiply
Return n1 * n2
End Function
Public Function Divide(ByVal n1 As Double, ByVal n2 As Double) As Double Implements ICalculator.Divide
Return n1 / n2
End Function
End Class
// Service class that implements the service contract.
public class CalculatorService : ICalculator
{
public double Add(double n1, double n2)
{
return n1 + n2;
}
public double Subtract(double n1, double n2)
{
return n1 - n2;
}
public double Multiply(double n1, double n2)
{
return n1 * n2;
}
public double Divide(double n1, double n2)
{
return n1 / n2;
}
}
El servicio expone un punto de conexión para comunicarse con el servicio, definido mediante un archivo de configuración (Web.config), como se muestra en la siguiente configuración de ejemplo.
<services>
<service
name="Microsoft.ServiceModel.Samples.CalculatorService"
behaviorConfiguration="CalculatorServiceBehavior">
<!-- ICalculator is exposed at the base address provided by
host: http://localhost/servicemodelsamples/service.svc. -->
<endpoint address=""
binding="wsHttpBinding"
contract="Microsoft.ServiceModel.Samples.ICalculator" />
...
</service>
</services>
El servicio expone el punto de conexión en la dirección base proporcionada por el host IIS o WAS. El enlace se configura con un estándar WSHttpBinding, que proporciona protocolos de comunicación HTTP y servicios web estándar para direccionamiento y seguridad. El contrato es el ICalculator
implementado por el servicio.
Como se ha configurado, el servicio puede ser accedido en http://localhost/servicemodelsamples/service.svc
por un cliente en el mismo ordenador. Para que los clientes de equipos remotos accedan al servicio, se debe especificar un nombre de dominio completo en lugar de localhost.
El marco de trabajo no expone metadatos de forma predeterminada. Por tanto, el servicio activa ServiceMetadataBehavior y expone un punto de conexión de intercambio de metadatos (MEX) en http://localhost/servicemodelsamples/service.svc/mex
. La siguiente configuración muestra esto.
<system.serviceModel>
<services>
<service
name="Microsoft.ServiceModel.Samples.CalculatorService"
behaviorConfiguration="CalculatorServiceBehavior">
...
<!-- the mex endpoint is exposed at
http://localhost/servicemodelsamples/service.svc/mex -->
<endpoint address="mex"
binding="mexHttpBinding"
contract="IMetadataExchange" />
</service>
</services>
<!--For debugging purposes set the includeExceptionDetailInFaults
attribute to true-->
<behaviors>
<serviceBehaviors>
<behavior name="CalculatorServiceBehavior">
<serviceMetadata httpGetEnabled="True"/>
<serviceDebug includeExceptionDetailInFaults="False" />
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
El cliente se comunica mediante un tipo de contrato determinado mediante una clase de cliente generada por serviceModel Metadata Utility Tool (Svcutil.exe). Este cliente generado está incluido en el archivo generatedClient.cs o generatedClient.vb. Esta utilidad recupera los metadatos de un servicio determinado y genera un cliente para que lo use la aplicación cliente para comunicarse mediante un tipo de contrato determinado. El servicio hospedado debe estar disponible para generar el código de cliente, ya que el servicio se usa para recuperar los metadatos actualizados.
Ejecute el comando siguiente desde un símbolo del sistema SDK en el directorio cliente para generar el proxy especificado:
svcutil.exe /n:"http://Microsoft.ServiceModel.Samples,Microsoft.ServiceModel.Samples" http://localhost/servicemodelsamples/service.svc/mex /out:generatedClient.cs
Para generar el cliente en el tipo Visual Basic el siguiente símbolo del sistema de SDK:
Svcutil.exe /n:"http://Microsoft.ServiceModel.Samples,Microsoft.ServiceModel.Samples" http://localhost/servicemodelsamples/service.svc/mex /l:vb /out:generatedClient.vb
Mediante el uso del cliente generado, el cliente puede acceder a un punto de conexión de servicio determinado mediante la configuración de la dirección y el enlace adecuados. Al igual que el servicio, el cliente usa un archivo de configuración (App.config) para especificar el punto de conexión con el que quiere comunicarse. La configuración del punto de conexión de cliente consta de una dirección absoluta para el punto de conexión de servicio, el enlace y el contrato, como se muestra en el ejemplo siguiente.
<client>
<endpoint
address="http://localhost/servicemodelsamples/service.svc"
binding="wsHttpBinding"
contract=" Microsoft.ServiceModel.Samples.ICalculator" />
</client>
La implementación del cliente instancia al cliente y usa la interfaz tipada para empezar a comunicarse con el servicio, como se ve en el código de ejemplo siguiente.
' Create a client
Dim client As New CalculatorClient()
' Call the Add service operation.
Dim value1 = 100.0R
Dim value2 = 15.99R
Dim result = client.Add(value1, value2)
Console.WriteLine("Add({0},{1}) = {2}", value1, value2, result)
' Call the Subtract service operation.
value1 = 145.00R
value2 = 76.54R
result = client.Subtract(value1, value2)
Console.WriteLine("Subtract({0},{1}) = {2}", value1, value2, result)
' Call the Multiply service operation.
value1 = 9.00R
value2 = 81.25R
result = client.Multiply(value1, value2)
Console.WriteLine("Multiply({0},{1}) = {2}", value1, value2, result)
' Call the Divide service operation.
value1 = 22.00R
value2 = 7.00R
result = client.Divide(value1, value2)
Console.WriteLine("Divide({0},{1}) = {2}", value1, value2, result)
'Closing the client gracefully closes the connection and cleans up resources
// Create a client.
CalculatorClient client = new CalculatorClient();
// Call the Add service operation.
double value1 = 100.00D;
double value2 = 15.99D;
double result = client.Add(value1, value2);
Console.WriteLine("Add({0},{1}) = {2}", value1, value2, result);
// Call the Subtract service operation.
value1 = 145.00D;
value2 = 76.54D;
result = client.Subtract(value1, value2);
Console.WriteLine("Subtract({0},{1}) = {2}", value1, value2, result);
// Call the Multiply service operation.
value1 = 9.00D;
value2 = 81.25D;
result = client.Multiply(value1, value2);
Console.WriteLine("Multiply({0},{1}) = {2}", value1, value2, result);
// Call the Divide service operation.
value1 = 22.00D;
value2 = 7.00D;
result = client.Divide(value1, value2);
Console.WriteLine("Divide({0},{1}) = {2}", value1, value2, result);
//Closing the client releases all communication resources.
client.Close();
Al ejecutar el ejemplo, las solicitudes de operación y las respuestas se muestran en la ventana de la consola del cliente. Presione ENTRAR en la ventana del cliente para apagar el cliente.
Add(100,15.99) = 115.99
Subtract(145,76.54) = 68.46
Multiply(9,81.25) = 731.25
Divide(22,7) = 3.14285714285714
Press <ENTER> to terminate client.
En el ejemplo Introducción se muestra la manera estándar de crear un servicio y un cliente. La otra compilación básica se basa en este ejemplo para mostrar características concretas del producto.
Para configurar, compilar y ejecutar el ejemplo
Asegúrese de que ha realizado el procedimiento de instalación única para los ejemplos de Windows Communication Foundation.
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.
Para ejecutar el ejemplo en una configuración con un solo equipo o con varios, siga las instrucciones que se indican en Ejecución de los ejemplos de Windows Communication Foundation.