WCF 4 Routing Service: Tablas de enrutado en función del To

En otro post relativamente reciente sobre el servicio de Routing de WCF se explicó como crear un servicio de router con las nuevas API’s incorporadas a WCF 4, System.ServiceModel.Routing. Recientemente, en un proyecto tenía que implementar una pasarela de intermediario que se basara en la dirección del servicio destino para realizar el enrutamiento, lógicamente, la primera aproximación consiste en usar uno de los filtros por defecto de los que disponemos, EndpointAddress ,el cual en teoría hace este trabajo por nosotros. Después de unas pruebas y de comprobar como el funcionamiento no era correto me decidí por revisar correctamente la documentación asociada y pude comprobar como este MessageFilter no incluye el segmento del host dentro de la comparación de las direcciones, es decir, para este filtro,la uri http://plainconceptsLondon/Servicio es exáctamente igual a http://plainconceptsMadrid/Servicio, técnicamente, este problema se podría resolver realizando la configuración del servicio por código  y estableciendo a este filtro la propiedad IncludeHostNameComparasion a true, pero perdía algo que necesitaba, la configuración del servicio en mi archivo de configuración. Llegado a este puntó me decidi por cambiar el tipo de filtro y basarme en una consulta XPath del sobre SOAP para verificar la cabecera To, dirección lógica del servicio, y con esto se solucionó el problema. Si alguno se encuentra con esta necesidad os dejo aquí la consulta XPath que permite realizar este trabajo, espero que algún dia os sea util…..

 

<routing>
  <namespaceTable>
    <add prefix="s" namespace="http://www.w3.org/2003/05/soap-envelope" />
    <add prefix="wsa" namespace="http://www.w3.org/2005/08/addressing" />
  </namespaceTable>
  <filters>
    <filter name="FiltroMadrid" filterType="XPath" filterData="/s:Envelope/s:Header/wsa:To=’net.tcp://plainconceptsMadrid/Servicio’"/>
    <filter name="FiltroLondres" filterType="XPath" filterData="/s:Envelope/s:Header/wsa:To=’net.tcp://plainconceptsLondon/Servicio’"/>
  </filters>
  <filterTables>
    <filterTable name="ROUTE_TABLE">
      <add filterName="FiltroMadrid" endpointName="Madrid" priority="1"/>
      <add filterName="FiltroLondres" endpointName="Londres" priority="1"/>
    </filterTable>
  </filterTables>
</routing>

2 comentarios sobre “WCF 4 Routing Service: Tablas de enrutado en función del To”

Responder a anonymous Cancelar respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *