2014-11-08 61 views
0

晚上好,處理不對稱頭在Web服務

我把一些舊的.NET 2代碼的過程中.NET 4在這個項目中的一個小角落是,有一個WSE通話由第三方運行的SOAP Web服務。該服務很古怪 - 它使用UserToken認證,這很好,但它的方式似乎並不適用於WCF。

我的第一種方法是將綁定配置爲使用TransportWithMessageCredential,並通過<clientName>.ClientCredentials.UserName設置用戶名/密碼。在運行時,這引發了一個異常,表明響應中缺少安全性。在對Fiddler進行了一些調查之後,我發現雖然我發送了UserToken標題,但是在服務響應中沒有安全標題。 WCF認爲格式無效並引發異常。

作爲一個實驗,我將綁定切換爲使用Transport安全性,並在端點配置中添加了<headers>...</headers>塊,實質上對憑證進行了硬編碼。這工作,WCF很滿意,因爲它並沒有試圖驗證消息的憑據。

我現在已經有了一個工作原型,但從設計的角度來看,我真的不滿意它,但是我很遺憾提出了一個更好的解決方案。

有沒有辦法(1)配置服務,使其發送UserToken,但不需要返回安全塊,或者(2)在代碼中注入SOAP頭,因此更具動態性:在配置中?

謝謝!

回答

1

首先使用WCF BindingBox將您的基本http綁定轉換爲自定義綁定。然後在自定義綁定的安全元素添加此:

enableUnsecuredResponse="true" 
+0

這很好地工作。謝謝!我很久以前就不會發現這一點。 – Jacob 2014-11-08 19:01:09

+0

一方面說明:發生器發出''這會導致運行時錯誤;它看起來應該是'messageVersion'。 – Jacob 2014-11-08 19:02:07