2012-01-25 18 views
9

Sto riscontrando un problema di compatibilità interessante tra un client WCF e un servizio Web Java. In breve, ho scoperto che il modo in cui viene generata l'intestazione causa il problema: gli elementi ActivityId e Action nell'intestazione e ciò che WCF sta facendo con lo spazio dei nomi dell'intestazione personalizzata sta causando problemi. Ho consumato con successo WSDL con wsdl.exe, ma WCF sembra manipolare l'intestazione in un modo che il servizio web Java non piace. C'è un modo in cui posso impostare i binding per il client WCF per non inviare gli elementi ActivityId e Action?Rimuovi ActivityId dalla richiesta WCF

+0

ci mostri il lato client ha generato la configurazione? –

risposta

9

Avete traccia attivata nel client? Penso che sia quello che sta aggiungendo l'ID dell'attività mentre cerca di far scorrere l'attività di tracciamento al servizio per la traccia end-to-end. Disattiva il flag di tracciamento attività e dovrebbe andare - vedi il mio commento per l'intestazione azione

+0

era la traccia che aggiungeva quegli elementi; disabilitare la traccia ha aiutato a risolvere il problema. Il servizio web Java non ha interpretato il messaggio SOAP molto bene (una sorta di strano problema di namespace). – CodeMonkey1313

+0

Come lo spegnete? Chi è spento? – irperez

+0

@irperez Ho ristretto le impostazioni che devono essere disattivate per rimuovere l'intestazione SOAP 'ActivityId'. – StuartLC

4

Questo problema si verifica in genere quando un client WCF tenta di connettersi a un server non WCF, ad es. JAX-WS, Websphere ecc

Giusto per aggiungere al commento di Richard salvagente risposta e l'indirizzo di @ irperez, le impostazioni effettive che devono essere disattivato per evitare che la diagnostica WCF di aggiungere ActivityId durante WCF diagnostica Tracing sono da rimuovere:

  • Rimuovere ActivityTracing da switchvalue
  • Set propagateActivity al false

cioè Change

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

A:

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

Se il ActivityId è attivata, inietta il seguito nelle intestazioni SOAP, che può rompere i server ignari:

<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>