¿Cómo puedo hacer que el enrutamiento de WCF me dé un mensaje de error más detallado que, sin MessageFilter coincidente?

StackOverflow https://stackoverflow.com/questions/6311423

  •  26-10-2019
  •  | 
  •  

Pregunta

¿Hay alguna forma de configurar el enrutamiento de WCF para que si sus filtros no coinciden, pueda obtener más información sobre el mensaje que no podría enrutarse?

Actualmente estamos usando AppFabric y solo recibimos el siguiente mensaje. Este mensaje no es muy útil cuando se intenta descubrir qué mensaje no coincidía con un filtro.

No matching MessageFilter was found for the given Message.
¿Fue útil?

Solución

Esta no es la mejor solución, he estado experimentando una forma de verificar que un servicio de enrutamiento funcione como configurado, pero aún no he encontrado la mejor manera.

Pero una forma es proporcionar un filtro de coincidencia, y tener un servicio que acepte todas las solicitudes y lo registre, y devuelve un 404 al cliente

    <routing>
        <filters>
            <filter name="Other" filterType="MatchAll" />
            <filter name="action1" filterType="Action" filterData="http://tempuri.org/action2" />
            <filter name="action2" filterType="Action" filterData="http://tempuri.org/action1" />
        </filters>
        <filterTables>
            <filterTable name="FilterTable">
                <add filterName="action1" endpointName="Service1" priority="1" />
                <add filterName="action2" endpointName="Service2" priority="1" />
                <add filterName="Other" endpointName="Logger" priority="0" />
            </filterTable>
        </filterTables>
    </routing>

El punto final del registrador simplemente apunta a un servicio simple que acepta un mensaje y lo inicia, y devuelve un 404

Algún código psudo:

[ServiceBehavior]
public class RoutingLogger : IYourInterface
{
    public System.ServiceModel.Channels.Message YourInterfaceMethod(System.ServiceModel.Channels.Message message)
    {
        LogMessage(message);
        return new Custom404Message();
    }
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top