Azure Service Bus (SB) Relay nos proporciona la capacidad de crear puntos finales públicos por nuestros servicios internos en las instalaciones corporativas / WCF que reside detrás de proxy / firewall. Esto es muy útil durante la fase de desarrollo de las aplicaciones externas que consumen los servicios de línea de negocio en las instalaciones. Por ejemplo, podemos utilizar nuestra nube de desarrollo (MSDN) que en la mayoría de los casos no tienen sitio para disposición de VPN sitio para conectarse a estos servicios. Pero si nuestra aplicación para hablar con más de 1 sobre los servicios de la premisa de que cada uno de ellos requiere un punto final SB relé, por lo que necesitamos para gestionar múltiples de punto final que apuntan al espacio de nombres SB. Por suerte WCF 4.0 de apoyo que permiten el reenvío de mensajes basado en las diferentes normas, tales como direcciones de punto final. Este diagrama muestra la arquitectura:
Un host de enrutamiento de servicios WCF con punto final Azure Relé mantiene una tabla de enrutamiento que asigna las direcciones URL de solicitud a los extremos de servicio WCF en premisa. Voy a esbozar los pasos para configurar esto a pesar de que no será pasos detalle ya que la mayoría de ellos están cubiertos en estos artículos de MSDN (y). Así que, básicamente tenemos que combina la configuración de ambos artículos.
Instalación de Windows Azure servicio de espacio de nombres, como se muestra en este. Digamos que el espacio de nombres de servicio se MyRouting de configuración del servicio de enrutamiento con el servicio de autobús Punto final: Crear servicio de aplicación de consola o Windows un Visual Studio, Agregue el paquete de servicio de Windows Azure autobús NuGet (que se sumará al requerir DLL y también añadir algunas extensiones de WCF que utilizan por servicio de retransmisión de autobús en el app.config) y también System.ServiceModel.dll, así como System.ServiceModel.Routing.dll. En Program.cs de tu aplicación de consola (en servicio de las ventanas de agregar esta rutina en los métodos y OnStart OnStop) agrega el siguiente código como se muestra en este public static void main (String [] args) { acogida var = new ServiceHost (typeof (RoutingService)); host.Open (); Console.WriteLine ( "host está escuchando"); Console.ReadLine (); host.Close (); } Configuración del host de servicio con el SB punto final y la capacidad de enrutamiento. Básicamente se combina la configuración de extremo de host de servicio como se muestra en este y xml enrutamiento como se muestra en la.¿Qué le gusta terminar a continuación: <Servicios> <BehaviorConfiguration servicio = "RoutingConfiguration" name = "System.ServiceModel.Routing.RoutingService"> <Punto final vinculante = "basicHttpRelayBinding" contrato = "System.ServiceModel.Routing.IRequestReplyRouter" address = " behaviorConfiguration = "sbTokenProvider" bindingConfiguration = "httpServiceBusBinding" /> </ Service> </ Servicios> El enrutamiento se define en la configuración del comportamiento del servicio denominado configuración de enrutamiento, que contiene la "tabla de enrutamiento '. A medida que el punto final está utilizando el basicHttpRelayBinding la dirección utiliza el protocolo https. La configuración de comportamiento como se muestra de la siguiente manera <comportamientos> <ServiceBehaviors> <Nombre de la conducta = "RoutingConfiguration"> <Enrutamiento filterTableName = "LOBFilterTable" routeOnHeadersOnly = "true" /> <ServiceDebug includeExceptionDetailInFaults = "false" /> </ Comportamiento></ ServiceBehaviors> <EndpointBehaviors> <Nombre de la conducta = "sbTokenProvider"> <TransportClientEndpointBehavior> <TokenProvider> <SharedSecret issuerName = "propietario" issuerSecret = "** ** tecla" /> </ TokenProvider> </ TransportClientEndpointBehavior> </ Comportamiento> </ EndpointBehaviors> </ Comportamientos> <Fijaciones> <BasicHttpRelayBinding> <Nombre del enlace = "httpServiceBusBinding"> <= Modo de seguridad "Transporte" relayClientAuthenticationType = "None" /> </ Binding> </ BasicHttpRelayBinding> </ Fijaciones> El RoutingConfiguration define la tabla de enrutamiento con el nombre LOBFilterTable y el punto final del servicio de autobús de relé está utilizando el comportamiento del punto final sbTokenProvider conectarse al relé Bus Azure. Como mi en las instalaciones de servicios de WCF están utilizando el basicHttpBinding, utilizo basicHttpRelayBinding para el punto final de Azure Service Bus vinculante. El siguiente paso es la definición de la tabla de enrutamiento comomostrado a continuación. El filterTable coincida con los filtros con el punto final del cliente. El enrutamiento se basa en EndpointAddress (esto muestra otro filtro que podemos utilizar en el servicio de enrutamiento WCF), en este caso el punto final en el bus de servicio público se asigna a WCF punto final del cliente (servicios WCF punto final en las instalaciones). <Ruta> <filtros> <Filter name = "LobSvc_A" tipofiltro = "EndpointAddress" FilterData = "/> <Filter name = "LobSvc_B" tipofiltro = "EndpointAddress" FilterData = " <Filtro = "LobSvc_C" tipofiltro = "EndpointAddress" FilterData = " </ Filtros> <FilterTables> <FilterTable name = "LOBFilterTable"> <Add filterName = "LobSvc_A" endpointName = "LobSvc_A_Client" /> <Add filterName = "LobSvc_B" endpointName = "LobSvc_B_Client" /> <Add filterName = "LobSvc_B" endpointName = "LobSvc_C_Client" /> </ FilterTable> </ FilterTables> </ Enrutamiento> Por último ponemos la configuración del cliente, como se muestra a continuación. Como se puede ver que elnombres de cliente de punto final coinciden con los de la filterTable <cliente> <Dirección de punto final = contrato "your.onPremise.WCF.A.url" = "*" = "BasicHttpBinding" name = "LobSvc_A_Client" unión /> <Dirección de punto final = contrato "your.onPremise.WCF.B.url" = "*" = "BasicHttpBinding" name = "LobSvc_B_Client" unión /> <Dirección de punto final = contrato "your.onPremise.WCF.C.url" = "*" = "BasicHttpBinding" name = "LobSvc_C_Client" unión /> </ Cliente> Por supuesto, usted puede añadir su propia configuración de enlace y el comportamiento de punto final para el cliente, tales como la conexión con ciertas credenciales. Hemos terminado con el anfitrión por lo que el siguiente paso es la creación de la conexión del cliente y este anfitrión. El cliente puede ser un papel en Azure Web o cualquier aplicación externa que necesitan conectarse a los servicios de WCF en las instalaciones. Este código de abajo muestra un método genérico para crear Channel Service Bus. el parámetro de cadena de punto final es la última parte del punto final en la configuración del filtro de FilterData. En nuestro ejemplo, puede serWcfEndpointA, WcfEndpointB o WcfEndpointC, por lo WcfEndpointA serán enviados a WCF en las instalaciones de un servicio. ChannelFactory private static <T> CreateChannelFactory <T> (cadena de punto final) { unión var = new BasicHttpRelayBinding (); binding.Security.Mode = EndToEndBasicHttpSecurityMode.Transport; binding.Security.RelayClientAuthenticationType = RelayClientAuthenticationType.None; var = new serviceBusEndpoint EndpointAddress (ServiceBusEnvironment.CreateServiceUri ( "https", "myrouting", "rttest /" Punto Final)); ChannelFactory <T> = sbChannelFactory nueva ChannelFactory <T> (vinculante, serviceBusEndpoint); sbChannelFactory.Endpoint.Behaviors.Add ( {nueva TransportClientEndpointBehavior TokenProvider = TokenProvider.CreateSharedSecretTokenProvider ( "propietario", "su clave secreta sb") }); volver sbChannelFactory; } En conclusión podemos tener un extremo de servicio de autobuses que se asignan a muchos servicios WCF en las instalaciones mediante la utilización de WCF servicio de enrutamientocapacidad.