Procedimiento: Crear un servicio basado en REST que obtenga acceso al Service Bus
Windows Azure admite en la actualidad dos estilos diferentes de aplicaciones que cualifican como servicios basados en REST: una aplicación tradicional Service Bus que cumple con el modelo de programación web y una aplicación conforme con HTTP que usa un búfer de mensajes.
-
Aplicación tradicional
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 del Service Bus. Para ver un ejemplo extendido de una aplicación de servicio basada en REST, vea el Tutorial de REST para Service Bus, que a su vez está basado en el ejemplo de WebHttp en el SDK de Windows Azure. -
Aplicaciones del búfer de mensajes
El Búfer de mensajes es una característica del Service Bus que expone una interfaz REST a una ubicación del búfer. Las aplicaciones del remitente pueden usar este búfer de mensajes para almacenar temporalmente mensajes y eventos, de manera similar a cualquier otro búfer. De forma similar, las aplicaciones cliente pueden suscribirse al búfer de mensajes para recibir mensajes o eventos almacenados. Dado que la interfaz está expuesta a través del Service Bus, estará disponible a cualquier aplicación que pueda conectarse a Internet. Debido a que el búfer de mensajes es una interfaz de estilo REST, puede conectarse a él mediante aplicaciones de estilo no WCF, tales como aplicaciones JavaScript, navegadores web y otros productos que no son de Microsoft. Esto incluye escribir servicios en JavaScript. No obstante, debido a que esta tecnología es tan diferente de una aplicación típica del Service Bus, tiene su propia sección en la documentación. Para obtener más información sobre creación de aplicaciones que interactúan con el búfer de mensajes, vea Introducción al búfer de mensajes.
Como los búferes de mensaje cuentan con una sección exclusiva en la documentación, este tema se centra principalmente en los detalles para crear una aplicación básica del Service Bus que use el estándar REST. 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.
Para hospedar una aplicación de Service Bus Service que cumpla con el estándar REST
-
Cree el servicio usando el patrón estándar tal como se define en Generación de un servicio para el Service Bus; es decir, defina e implemente un contrato de servicio, configure e implemente el host de servicio, etc.
-
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 del 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(); } -
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; }
-
-
Cree la dirección para el servicio usando el método CreateServiceUri:
string serviceNamespace = “myServiceNamespace” Uri address = ServiceBusEnvironment.CreateServiceUri("https", serviceNamespace, "Image"); -
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.
-
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 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.
-
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 deshabilitarlo en el elemento
<binding>del archivo App.config, de modo que el cliente no tenga que presentar credenciales (por ejemplo, al usar un explorador). Para obtener más información sobre autenticación con el Service Bus, vea Protección y autenticación de una conexión de Service Bus. -
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 seguridad, vea Protección y autenticación de una conexión de Service Bus.
-
Abra el servicio con una llamada a
WebServiceHost.Open:host.Open()
-
Cuando haya terminado, cierre el host con
WebServiceHost.Close.host.Close();