Definición de un contrato de servicio de Windows Communication Foundation

Ésta es la primera de las seis tareas necesarias para crear un servicio de Windows Communication Foundation (WCF) básico y un cliente que pueda llamar al servicio. Para obtener información general de las seis tareas, vea el tema Tutorial de introducción.

Al crear un servicio WCF básico, la primera tarea es definir un contrato. El contrato especifica qué operaciones admite el servicio. Una operación se puede considerar un método de servicio Web. Los contratos se crean mediante la definición de una interfaz de C++, C# o Visual Basic (VB). Cada método de la interfaz se corresponde con una operación de servicio concreta. Cada interfaz debe tener ServiceContractAttribute aplicado y cada operación debe tener OperationContractAttribute aplicado. Si un método de una interfaz que tiene ServiceContractAttribute no tiene OperationContractAttribute, no se expone ese método.

El código utilizado para esta tarea se proporciona en el ejemplo que sigue al procedimiento.

Creación de un contrato de Windows Communication Foundation con una interfaz

  1. Abra Visual Studio 2010 como administrador haciendo clic con el botón secundario en el programa en el menú Inicio y seleccionando Ejecutar como administrador.

  2. Cree un nuevo proyecto de aplicación de consola. Haga clic en el menú Archivo y seleccione Nuevo, Proyecto. En el cuadro de diálogo Nuevo proyecto, seleccione Visual Basic o Visual C#. Elija la plantilla Aplicación de consola y denomínela Service. Use la ubicación predeterminada.

  3. En un proyecto de C#, Visual Studio crea un archivo denominado Program.cs. Esta clase contendrá un método vacío denominado Main(). En un proyecto de VB, Visual Studio crea un archivo denominado Module1.vb con una subrutina vacía denominada Main(). Estos métodos se requieren para que un proyecto de aplicación de consola se compile correctamente con el fin de que pueda dejarlos en el proyecto de forma segura.

  4. Cambie el espacio de nombres Service predeterminado a Microsoft.ServiceModel.Samples. Para ello, haga clic con el botón secundario en el proyecto en el Explorador de soluciones y seleccione Propiedades. Asegúrese de que esté seleccionada la pestaña Aplicación situada a la izquierda del cuadro de diálogo Propiedades. En un proyecto de C#, escriba Microsoft.ServiceModel.Samples en el cuadro de edición que tiene la etiqueta Espacio de nombres predeterminado. En un proyecto de VB, escriba Microsoft.ServiceModel.Samples en el cuadro de edición que tiene la etiqueta del espacio de nombres Root. Haga clic en el menú Archivo y seleccione Guardar todo para guardar los cambios.

  5. Si usa C#, cambie el espacio de nombres en el archivo Program.cs generado a Microsoft.ServiceModel.Samples como se muestra en el siguiente ejemplo.

    namespace Microsoft.ServiceModel.Samples 
    {
        class Program
        {
            static void Main(string[] args)
            {
            }
        }
    }
    

    Si usa VB, agregue una instrucción Namespace y una instrucción End Namespace al archivo Module1.vb generado como se muestra en el siguiente ejemplo.

    Namespace Microsoft.ServiceModel.Samples
        Module Module1
            Sub Main()
            End Sub
        End Module
    End Namespace
    
  6. Agregue una referencia a System.ServiceModel.dll al proyecto.

    1. En el Explorador de soluciones, haga clic con el botón secundario en la carpeta Referencias bajo la carpeta del proyecto y elija Agregar referencia.

    2. Seleccione la pestaña .NET en el cuadro de diálogo Agregar referencia y desplácese hacia abajo hasta que vea System.ServiceModel (versión 4.0.0.0), selecciónelo y haga clic en Aceptar.

    ms731835.note(es-es,VS.100).gifNota:
    Al usar un compilador de línea de comandos (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".

  7. Agregue una instrucción using (Imports en Visual Basic) para el espacio de nombres System.ServiceModel.

    Imports System.ServiceModel
    
    using System.ServiceModel;
    
  8. Defina una nueva interfaz denominada ICalculator y aplique el atributo ServiceContractAttribute a la interfaz con un valor de Namespace de "http://Microsoft.ServiceModel.Samples". Especificar el espacio de nombres explícitamente es un procedimiento recomendado porque evita que el valor de espacio de nombres predeterminado se agregue al nombre del contrato.

    ms731835.note(es-es,VS.100).gifNota:
    Al usar los atributos para anotar una interfaz o clase, puede quitar la parte del atributo del nombre de atributo. Por tanto, la clase ServiceContractAttribute se convierte en [ServiceContract] en C# o <ServiceContract> en Visual Basic.

    <ServiceContract(Namespace:="http://Microsoft.ServiceModel.Samples")> _
    Public Interface ICalculator
    
    [ServiceContract(Namespace = "http://Microsoft.ServiceModel.Samples")]
    public interface ICalculator
    
  9. Declare un método para cada una de las operaciones que el contrato ICalculator expone (suma, resta, multiplicación y división) dentro de la interfaz y aplique el atributo OperationContractAttribute a cada método que desee exponer como parte del contrato público de WCF.

        <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
    
    [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);
    

Ejemplo

En el siguiente código de ejemplo se muestra una interfaz básica que define un contrato de servicio.

Imports System
' Step 5: Add the Imports statement for the System.ServiceModel namespace
Imports System.ServiceModel

Namespace Microsoft.ServiceModel.Samples
    ' Step 6: 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
        <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
End Namespace
using System;
// Step 5: Add the using statement for the System.ServiceModel namespace
using System.ServiceModel;
namespace Microsoft.ServiceModel.Samples
{
  // Step 6: Define a service contract.
  [ServiceContract(Namespace = "http://Microsoft.ServiceModel.Samples")]
  public interface ICalculator
  {
    // Step7: Create the method declaration for the contract.
    [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);
  }
}

Ahora se crea la interfaz, continúe en Cómo implementar un contrato de servicio de Windows Communication Foundation para implementarla. Para obtener información sobre cómo solucionar problemas, vea Solución de problemas con el tutorial de introducción.

Vea también

Tareas

Cómo implementar un contrato de servicio de Windows Communication Foundation
Ejemplo de introducción
Autohospedaje

Referencia

ServiceContractAttribute
OperationContractAttribute