2012-01-25 14 views
9

Tengo un problema de compatibilidad interesante entre un cliente WCF y un servicio web Java. En resumen, he encontrado que la forma en que se genera el encabezado está causando el problema: los elementos ActivityId y Action en el encabezado, así como lo que WCF está haciendo con el espacio de nombres del encabezado personalizado está causando problemas. He consumido con éxito el WSDL con wsdl.exe, pero WCF parece estar manipulando el encabezado de una manera que no le gusta al servicio web de Java. ¿Hay alguna forma en que pueda configurar los enlaces para que el cliente WCF no envíe los elementos ActivityId y Action?Eliminar ActivityId de WCF Request

+0

nos muestras el lado del cliente generó la configuración? –

Respuesta

9

¿Tiene el seguimiento activado en el cliente? Creo que eso es lo que está agregando el ID de la actividad como su intento de dirigir la actividad de rastreo al servicio para el rastreo de extremo a extremo. Desactive el indicador de seguimiento de actividad y debería ir; consulte mi comentario sobre el encabezado de acción

+0

fue el trazado que agrega esos elementos; deshabilitar el rastreo ayudó a solucionar el problema. El servicio web de Java no interpretó muy bien el mensaje SOAP (algún tipo de problema de espacio de nombres extraño). – CodeMonkey1313

+0

¿Cómo lo apagas? ¿Dónde está apagado? – irperez

+0

@irperez He reducido las configuraciones que deben desactivarse para eliminar el encabezado SOAP 'ActivityId'. – StuartLC

4

Este problema suele ocurrir cuando un cliente WCF intenta conectarse a un servidor que no pertenece a WCF, p. JAX-WS, Websphere etc.

Sólo para añadir al comentario de Richard respuesta salvavidas y dirección de @ irperez, los ajustes reales que necesitan ser desactivado para evitar diagnósticos WCF de la adición de ActivityId durante WCF diagnóstico de localización son eliminar:

  • Retire ActivityTracing de switchvalue
  • Conjunto propagateActivity a false

es decir, el cambio

<system.diagnostics> 
    <sources> 
    <source name="System.ServiceModel" switchValue="Information, ActivityTracing" 
      propagateActivity="true"> 
    <listeners> 
     <add name="xml"/> 
    </listeners> 
    </source> 
... 

Para:

<source name="System.ServiceModel" switchValue="Information" 
     propagateActivity="false"> 
    <listeners> 
    <add name="xml"/> 
    </listeners> 

Si el ActivityId está habilitado, se inyecta el siguiente en los encabezados SOAP, que puede romper los servidores confiados:

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"> 
    <s:Header> 
    <ActivityId CorrelationId="5de75017-da08-4ac2-84f2-5374953cc2a1" 
     xmlns="http://schemas.microsoft.com/2004/09/ServiceModel/Diagnostics"> 
     9f076849-e76e-4675-84c1-5026b1c2eb1a 
    </ActivityId> 
    </s:Header>