Exportar (0) Imprimir
Expandir todo

Procedimiento: Crear un servicio basado en REST que acceda al bus de servicio

Actualizado: septiembre de 2014

Microsoft Azure Service Bus admite actualmente aplicaciones que se califican como servicios basados en REST: una aplicación Service Bus tradicional que cumple con el modelo de programación web. Este estilo de aplicación usa el modelo de programación Windows Communication Foundation (WCF) básico: definición y creación de un contrato de servicio, uso de un enlace y credenciales de seguridad para conectar con Service Bus, etcétera. La principal incorporación es que la aplicación Service Bus basada en REST usa un contrato de servicio a cuyos miembros se aplican los atributos [OperationContract, WebGet] o [OperationContract, WebInvoke]. Estos comportamientos definen la interfaz como una interfaz REST y permiten que Service Bus interactúe con otras aplicaciones de estilo REST. Por lo tanto, las aplicaciones contienen código adicional que les permite construir mensajes de estilo HTTP. Por último, todas las 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 exhaustivo de una aplicación de servicio basada en REST, consulte Tutorial de REST para Service Bus, que a su vez se basa en el ejemplo WebHttp Service Bus.

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

  1. Cree el servicio usando el patrón estándar tal 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étera.

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

      El código de ejemplo siguiente muestra cómo etiquetar un miembro de interfaz como miembro GET de estilo REST.

      public interface IImageContract
      {
          [OperationContract, WebGet]
          Stream GetImage();
      }
      
    2. Al implementar el contrato, establezca el encabezado de tipo de contenido apropiado para las respuestas web salientes, tal como definen las necesidades de la 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 instancia nueva de WebServiceHost.

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

    La clase WebServiceHost se deriva de la clase ServiceHost y complementa el modelo de programación web WCF. También facilita el hospedaje de servicios basados en REST. Se recomienda usar WebServiceHost en lugar de ServiceHost en la implementación de la 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, el enlace y los contratos (denominados "ABC") 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="sharedAccessSignatureClientCredentials"
                      address="" />
        </service>
    

    Aquí, el ABC está vinculado al extremo del 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 se usa para un extremo de servicio en una aplicación Service Bus basada en REST es WebHttpRelayBinding.

  5. Si es necesario, deshabilite la autenticación de cliente.

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

    De forma predeterminada, 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, por lo que el cliente no tiene que presentar credenciales (por ejemplo, cuando se 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 bus de servicio.

  6. Defina la seguridad para su aplicación:

        <behaviors>
          <endpointBehaviors>
            <behavior name="sharedAccessSignatureClientCredentials">
              <transportClientEndpointBehavior>
                <tokenProvider>
                  <sharedAccessSignature keyName=”RootManageSharedAccessKey” key="**key**" />
                </tokenProvider>
              </transportClientEndpointBehavior>
            </behavior>
          </endpointBehaviors>
        </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 bus de servicio.

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

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

    host.Close();
    

Mostrar:
© 2015 Microsoft