2012-01-25 40 views
9

我在WCF客戶端和Java Web服務之間有一個有趣的兼容性問題。總之,我發現生成頭文件的方式會導致問題 - 頭文件中的ActivityId和Action元素以及WCF處理自定義頭文件的命名空間所引發的問題。我已經使用wsdl.exe成功地使用了WSDL,但WCF似乎是以Java Web服務不喜歡的方式來操作標頭。有沒有什麼辦法可以爲WCF客戶端設置綁定,以便不發送ActivityId和Action元素?從WCF請求中刪除ActivityId

+0

你能告訴我們客戶端生成配置? –

回答

9

您是否在客戶端打開了跟蹤?我認爲這就是添加活動ID,因爲它試圖將跟蹤活動傳遞給服務以進行端到端跟蹤。關閉活動跟蹤標誌,它應該去 - 看到我對操作標題的評論

+0

這是添加這些元素的追蹤;禁用跟蹤幫助解決了這個問題。 Java Web服務沒有很好地解釋SOAP消息(某種奇怪的命名空間問題)。 – CodeMonkey1313

+0

你如何關閉它?它關掉了什麼? – irperez

+0

@irperez我已經縮小了需要停用的設置,以刪除「ActivityId」SOAP標頭。 – StuartLC

4

當WCF客戶端嘗試連接到非WCF服務器時,通常會發生此問題,例如, JAX-WS下,WebSphere等

只需添加到理查德的救星迴答和地址@ irperez的評論,它需要被禁用,以防止WCF診斷從WCF診斷跟蹤過程中添加ActivityId實際設置刪除:

  • 刪除ActivityTracingswitchvalue
  • 設置propagateActivityfalse

即更改

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

要:

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

如果ActivityId被啓用,它注入下面的進SOAP頭,它可以打破信任的服務器:

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