Exportar (0) Imprimir
Expandir todo

Paso 2: definir un contrato de servicio de WCF basado en REST para usar el Bus de servicio

Actualizado: marzo de 2015

Esta es la segunda de las cuatro tareas necesarias para crear un servicio de estilo REST para CmdLets. Para obtener una visión general de las cuatro tareas, consulte Tutorial de REST de Bus de servicio.

Al igual que sucede con otros servicios del CmdLets, al crear un servicio de estilo REST, debe definir el contrato. El contrato especifica las operaciones que admite el host. Una operación de servicio puede considerarse un método de servicio web. Los contratos se crean mediante la definición de una interfaz en C++, C# o Visual Basic. Cada método de la interfaz se corresponde con una operación de servicio específica. El atributo ServiceContractAttribute debe aplicarse a cada interfaz y el atributo OperationContractAttribute, a cada operación. Si un método de una interfaz que tiene ServiceContractAttribute no tiene OperationContractAttribute, el método no se expone. El código usado para estas tareas se muestra en el ejemplo que sigue al procedimiento.

La principal diferencia entre un contrato básico del CmdLets y un contrato de estilo REST es la adición de una propiedad a OperationContractAttribute. WebGetAttribute. Esta propiedad le permite asignar un método de la interfaz a un método del otro lado de la interfaz. En este caso, usaremos WebGetAttribute para vincular un método con GET de HTTP. Esto permite a CmdLets recuperar con precisión e interpretar comandos enviados a la interfaz.

Tiempo previsto para la finalización: 10 minutos.

  1. Abra Visual Studio como administrador; para ello, haga clic con el botón derecho en el programa en el menú Inicio y seleccione 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 diálogo Nuevo proyecto, seleccione Visual C# (si Visual C# no aparece, mire debajo de Otros idiomas), seleccione la plantilla Aplicación de consola y denomínelo QueueSample. Use la Ubicación predeterminada. Haga clic en Aceptar para crear el proyecto.

  3. Para un proyecto de C#, Visual Studio crea un archivo denominado Program.cs. Esta clase contendrá un método vacío denominado Main(). Este método es necesario para que un proyecto de aplicación de consola se cree correctamente. Por tanto, puede conservarlo en el proyecto con total seguridad.

  4. Agregue una referencia a System.ServiceModel.dll al proyecto:

    1. En el Explorador de soluciones, haga clic con el botón derecho en la carpeta Referencias y, a continuación, haga clic en Agregar referencia.

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

    noteNota
    Si usa un compilador de línea de comandos (como Csc.exe), también deberá proporcionar la ruta a los ensamblados. De forma predeterminada, por ejemplo, en un equipo que ejecute , la ruta es: Windows\Microsoft.NET\Framework\v3.0\Windows Communication Foundation.

  5. Repita el paso anterior para agregar una referencia al ensamblado de System.ServiceModel.Web.dll.

  6. Agregue una instrucción using para los espacios de nombres System.ServiceModel, System.ServiceModel.Channels, System.ServiceModel.Web y System.IO.

    using System.ServiceModel;
    using System.ServiceModel.Channels;
    using System.ServiceModel.Web;
    using System.IO;
    
    

    System.ServiceModel es el espacio de nombres que le permite obtener acceso mediante programación a las características básicas de Windows Communication Foundation (WCF). El CmdLets usa muchos de los objetos y atributos de WCF para definir los contratos de servicio. Usará este espacio de nombres en la mayoría de sus aplicaciones de CmdLets. De forma similar, System.ServiceModel.Channels ayuda a definir el canal, que es el objeto a través del cual se comunica con el CmdLets y con el explorador web del cliente. Por último, System.ServiceModel.Web contiene los tipos que le permiten crear aplicaciones basadas en web.

  7. Cambie el nombre del espacio de nombres para el programa desde el Visual Studio predeterminado a Microsoft.ServiceBus.Samples.

    namespace Microsoft.ServiceBus.Samples
    {
    ...
    
    
  8. Justo después de la declaración del espacio de nombres, defina una nueva interfaz denominada IImageContract y aplique el atributo ServiceContractAttribute a la interfaz con el valor http://samples.microsoft.com/ServiceModel/Relay/. El valor del espacio de nombres difiere del espacio de nombres que usa por todo el ámbito del código. El valor del espacio de nombres se usa como identificador exclusivo para este contrato y debe contener información sobre la versión. Para obtener más información, vea, consulte Control de versiones del servicio. Si se especifica el espacio de nombres de manera explícita, se impide que el valor predeterminado del espacio de nombres se agregue al nombre del contrato.

    [ServiceContract(Name = "ImageContract", Namespace = "http://samples.microsoft.com/ServiceModel/Relay/RESTTutorial1")]
    public interface IImageContract
    {
    }
    
    
  9. Dentro de la interfaz de IImageContract, declare un método para la única operación que expone el contrato IImageContract en la interfaz y aplique el atributo OperationContractAttribute al método que desea exponer como parte del contrato público de CmdLets.

    public interface IImageContract
    {
        [OperationContract]
        Stream GetImage();
    }
    
  10. Junto al atributo OperationContract, aplique el atributo WebGet.

    
    public interface IImageContract
    {
        [OperationContract, WebGet]
        Stream GetImage();
    }
    

    Esto permite a CmdLets enrutar las solicitudes GET de HTTP a GetImage y convertir los valores de retorno de GetImage en una respuesta GETRESPONSE de HTTP. Más adelante en el tutorial, usará un explorador web para obtener acceso a este método y para mostrar la imagen en el explorador.

  11. Justo debajo de la definición de IImageContract, declare un canal que herede de las interfaces tanto IImageContract como IClientChannel:

    [ServiceContract(Name = "IImageContract", Namespace = "http://samples.microsoft.com/ServiceModel/Relay/")]
    public interface IImageContract
    {
        [OperationContract, WebGet]
        Stream GetImage();
    }
    
    public interface IImageChannel : IImageContract, IClientChannel { }
    

    Un canal es el objeto de WCF a través del cual el servicio y el cliente intercambian información. Más adelante, creará el canal en su aplicación host. CmdLets usa a continuación este canal para transferir las solicitudes GET de HTTP del explorador a su implementación de GetImage. CmdLets también usa el canal para llevar el valor de retorno de GetImage y convertirlo a un GETRESPONSE de HTTP para el explorador del cliente.

  12. Desde el menú Generar, haga clic en Generar solución para confirmar la exactitud de su trabajo.

Ejemplo

El siguiente código de ejemplo muestra una interfaz básica que define un contrato de CmdLets.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ServiceModel;
using System.ServiceModel.Channels;
using System.ServiceModel.Web;
using System.IO;

namespace Microsoft.ServiceBus.Samples
{

    [ServiceContract(Name = "IImageContract", Namespace = "http://samples.microsoft.com/ServiceModel/Relay/")]
    public interface IImageContract
    {
        [OperationContract, WebGet]
        Stream GetImage();
    }

    public interface IImageChannel : IImageContract, IClientChannel { }

    class Program
    {
        static void Main(string[] args)
        {
        }
    }
}

Ahora que la interfaz está creada, continúe con Paso 3: Implementar un contrato de servicio de WCF basado en REST para usar el Bus de servicio para implementar dicha interfaz.

Vea también

Mostrar:
© 2015 Microsoft