2012-11-17 43 views
2

我有一個第三方SOAP客戶端能夠與舊的ASMX webservices進行通信。WCF SOAP答覆ASMX SOAP答覆格式

問題是與WCF服務。

我的WCF服務從這個客戶端接收消息沒有問題,但客戶端不喜歡我的WCF響應。

我測試的WCF服務發出如下回應:

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"> 
<s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <testResponse xmlns="http://www.tempuri.org"> 
    <testResult>randomStringData</testResult> 
    </testResponse> 
</s:Body> 
</s:Envelope> 

但老SOAP客戶端預計這種反應(ASMX服務):

<?xml version="1.0" encoding="utf-8"?> 
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
<soap:Body> 
    <testResponse xmlns="http://tempuri.org/"> 
    <testResult>randomStringData</testResult> 
    </testResponse> 
</soap:Body> 
</soap:Envelope> 

我沒有對客戶端沒有控制。 有沒有一種方法可以配置我的WCF發送與ASMX服務完全相同的消息?

我的WCF服務使用以下綁定:

<customBinding> 
    <binding name="soap11"> 
     <textMessageEncoding messageVersion="Soap11" writeEncoding="utf-8"></textMessageEncoding> 
     <httpTransport></httpTransport> 
    </binding> 
    </customBinding> 
+2

如果這兩個響應之間的唯一區別是「s:」而不是「soap:」,那麼這兩者就XML而言是相同的。即使對於傳統的ASMX服務或客戶端,兩者也是相同的。命名空間前綴(「s:」)只是實際命名空間的別名,命名空間是相同的。 –

+1

我有一種感覺,舊的SOAP客戶端已經硬編碼xml解析並正在搜索字符串「 Tanel

+0

我認爲約翰是正確的:與'soap:'相同'無論如何你可以嘗試curl實際發送原始xml,所以你可以用soap配置soap調用:作爲命名空間 – Fabio

回答

2

我設法解決與自定義消息檢查,並與BeforeSendReply方法前綴問題。

http://msdn.microsoft.com/en-us/library/system.servicemodel.dispatcher.idispatchmessageinspector.beforesendreply.aspx

P.S另一個偉大的方法是AfterReceiveRequest所有種類的信息調整魔力!

+0

如果更改前綴實際工作,則應該向該服務的所有者提交錯誤報告。實際的前綴是完全沒有意義的。或者說,它應該完全沒有意義。確保他們知道這一點,幫助你的伴侶。 –

+0

已經完成:)答案和預期的一樣...使用標準!我們的標準!大聲笑。 – Tanel