2013-10-28 78 views
0

WCF框架,我想改變從s響應格式:信封肥皂:信封,這裏是解決方案(URL鏈接):WCF,SOAP 1.1替換前綴

blogs.msdn.com/b/carlosfigueira /archive/2010/06/13/changing-prefixes-in-xml-responses.aspx

但是,代碼支持soap 1.2,我的要求是支持soap 1.1,它不能正常工作。我改變代碼如下:從(WsHttpBinding的)

Dictionary<string, string> namespaceToPrefixMapping = new Dictionary<string, string> 
{ 

    { "http://www.w3.org/2003/05/soap-envelope", "SOAP12-ENV" }, 
    { "http://www.w3.org/2005/08/addressing", "SOAP12-ADDR" }, 
}; 

至(basicHttpBinding的)

Dictionary<string, string> namespaceToPrefixMapping = new Dictionary<string, string> 
{ 

    { "http://schemas.xmlsoap.org/soap/envelope/", "soap" }, 
    { "http://www.w3.org/2005/08/addressing", "soap" }, 
}; 

所以客戶端將響應與以下消息:

客戶端和服務綁定可能不匹配。

我該如何繼續使用我的代碼?

+0

不應該有必要更改前綴。對於任何理解XML的客戶端而言,前綴都不重要。前綴並不重要 - 只有前綴表示的_namespace_很重要。如果你的客戶需要一個特定的前綴,那麼它是非常糟糕的,應該爲自己感到羞恥。 –

+0

但是要求是前綴,我也不想改變前綴 – flighting

+0

然後你誤解了需求,或者你的客戶誤解了XML。 –

回答

0

你應該把這篇文章一看:

http://vanacosmin.ro/Articles/Read/WCFEnvelopeNamespacePrefix

該方法與您擁有的方法不同,因爲此處轉換髮生在將消息發送到通道之前。它使用MessageFormatter而不是MessageEncoder。使用MessageFormatter更改消息可讓您在其他圖層中使用已更改的版本(例如,用於日誌記錄),並且在稍後需要添加消息安全性時也不會有問題。