Exportar (0) Imprimir
Expandir todo

Procedimiento:Crear un servicio basado en REST que obtenga acceso a Service Bus

Actualizado: junio de 2014

admite en la actualidad aplicaciones que cualifican como servicios basados en REST:una aplicación tradicional Service Bus que cumple con el modelo de programación web.Este estilo de aplicación usa el modelo de programación básico de Windows Communication Foundation (WCF):definición y creación de un contrato de servicio, uso de credenciales de enlace y seguridad para conectar con el Service Bus, etc.La principal adición es que una aplicación Service Bus basada en REST usa un contrato de servicio a cuyos miembros se les aplican los atributos [OperationContract, WebGet] o [OperationContract, WebInvoke].Estos comportamientos definen la interfaz como REST y permiten al Service Bus interactuar con otras aplicaciones de estilo REST.Y, en consecuencia, las aplicaciones contienen código adicional que les permite generar mensajes de estilo HTTP.Finalmente, todas estas aplicaciones usan el enlace WebHttpRelayBinding.Para obtener más información, vea Procedimiento:Exponer un servicio web basado en REST a través de Service Bus. Para obtener un ejemplo extendido de una aplicación de servicio basada en REST, vea el Tutorial de REST para Service Bus, que a su vez se basa en el ejemplo WebHttp de Service Bus.

El proceso de hospedar una aplicación del Service Bus basada en REST es muy similar a hospedar una aplicación estándar del Service Bus.Las principales diferencias se encuentran en el contrato y la configuración:el proceso real de hospedaje es básicamente el mismo.

  1. Cree el servicio usando el patrón estándar tal y como se define en Generación de un servicio para Service Bus; es decir, defina e implemente un contrato de servicio, configure e implemente el host de servicio, etc.

    1. Al aplicar el atributo OperationContractAttribute al contrato de servicio, asegúrese de que aplica los atributos relevantes para identificar los miembros basados en REST.Para obtener más información, veaProcedimiento:Procedimiento:Exponer un servicio web basado en REST a través de Service Bus.

      En el siguiente código de ejemplo se enseña a etiquetar un miembro de la interfaz como miembro GET de estilo REST.

      public interface IImageContract
      {
          [OperationContract, WebGet]
          Stream GetImage();
      }
      
    2. Al implementar el contrato, configure el encabezado adecuado del tipo de contenido para las respuestas web salientes, según definen las necesidades de su aplicación.

      public ImageService() 
      {
          this.bitmap = Image.FromFile(imageFileName);
      }
      
      public Stream GetImage()
      {
          MemoryStream stream = new MemoryStream();
          this.bitmap.Save(stream, ImageFormat.Jpeg);
      
          stream.Position = 0;
          WebOperationContext.Current.OutgoingResponse.ContentType = "image/jpeg";
      
          return stream;
      }        
      
      
      
  2. Cree la dirección para el servicio usando el método CreateServiceUri:

    string serviceNamespace = “myServiceNamespace”
    Uri address = ServiceBusEnvironment.CreateServiceUri("https", serviceNamespace, "Image");
    
    
  3. Cree una nueva instancia de WebServiceHost.

    WebServiceHost host = new WebServiceHost(typeof(ImageService), address);
    

    La clase WebServiceHost deriva de la clase ServiceHost y complementa al modelo de programación web de WCF.También facilita el hospedaje de servicios basados en REST.Se recomienda usar WebServiceHost en lugar de ServiceHost en la implementación de su aplicación Service Bus basada en REST.Para obtener más información, vea Modelo de programación REST de WCF en la documentación de WCF.

  4. Especifique la dirección, enlace y contratos (también conocido como los "ABC" por sus siglas en inglés) usados por el extremo de servicio.

        <services>
          <!-- Application Service -->
          <service name="Microsoft.ServiceBus.Samples.ImageService"
                   behaviorConfiguration="default">
            <endpoint name="RelayEndpoint"
                      contract="Microsoft.ServiceBus.Samples.IImageContract"
                      binding="webHttpRelayBinding"
                      bindingConfiguration="default"
                      behaviorConfiguration="sharedSecretClientCredentials"
                      address="" />
        </service>
    

    Aquí, el ABC está vinculado con el extremo en el archivo App.config.Para obtener más información sobre la configuración de una aplicación, vea Configuración de un servicio de WCF para registrar con el Service Bus.

    El único enlace que usar para un extremo de servicio en una aplicación del Service Bus basada en REST es WebHttpRelayBinding.

  5. En caso necesario, deshabilite la autenticación del cliente.

    
        <bindings>
          <!-- Application Binding -->
          <webHttpRelayBinding>
            <binding name="default">
                 <security relayClientAuthenticationType="None" />
            </binding>
          </webHttpRelayBinding>
        </bindings>
    
    

    Por defecto, el enlace WebHttpRelayBinding requiere la autenticación del cliente.En este paso se describe cómo deshabilitarla en el elemento <binding> en el archivo App.config, de forma que el cliente no tenga que presentar credenciales (por ejemplo, cuando usa un explorador). Para obtener más información sobre la autenticación con Service Bus, vea Protección y autenticación de una conexión de Service Bus.

  6. Defina la seguridad para su aplicación:

    
        <behaviors>
          <endpointBehaviors>
            <behavior name="sharedSecretClientCredentials">
              <transportClientEndpointBehavior credentialType="SharedSecret">
                <clientCredentials>
                  <sharedSecret issuerName="ISSUER_NAME" issuerSecret="ISSUER_SECRET" />
                </clientCredentials>
              </transportClientEndpointBehavior>
    
        </behaviors>
    

    En este ejemplo, la seguridad se define en el archivo App.config.Para obtener más información sobre la seguridad, vea Protección y autenticación de una conexión de Service Bus.

  7. Abra el servicio con una llamada a WebServiceHost.Open:

    host.Open()
    
  8. Cuando haya terminado, cierre el host con WebServiceHost.Close.

    host.Close();
    

Mostrar:
© 2014 Microsoft