2012-03-22 69 views
0

所以我構建了一個使用基本Auth Soap 1.2的服務。以下配置:又一個MessageSecurityException問題

<customBinding> 
    <binding name="MyHttpBinding"> 
     <security authenticationMode="UserNameOverTransport" securityHeaderLayout="Strict" 
     allowInsecureTransport="false"> 
     <secureConversationBootstrap /> 
     </security> 
     <textMessageEncoding messageVersion="Soap12" /> 
     <httpsTransport maxReceivedMessageSize="6553600" authenticationScheme="Basic" maxBufferSize="6553600" /> 
    </binding> 
    </customBinding> 

我有多個客戶端調用它(WCF和Java)。隨着WCF客戶端,我沒有任何問題,但與Java客戶端,我得到服務器端以下異常:

System.ServiceModel.Security.MessageSecurityException安全 處理器無法找到該郵件的安全頭。此 可能是因爲該消息是不安全的錯誤,或者因爲通信方之間存在綁定不匹配。如果服務配置了安全性並且客戶端未使用安全性,則可能發生此問題 。

我不知道如何解決這個問題。 系統需要使用基本身份驗證,並且必須使用Soap 1.2(因此是自定義綁定)。 我無法控制調用Java客戶端,但我確信它使用基本身份驗證調用該服務。

有什麼建議嗎?

回答

1

我不是Java專家,但據我所知,Java客戶端無法在運行中實現SOAP 1.2。而Java客戶端需要外部庫來補充1.2 SOAP消息中的必要策略/安全性頭部。

我已經指示我的Java客戶端使用Metro庫來消耗我的WCF服務。 (我正在使用與您的類似的綁定。)以下是blog如何包含Metro庫。

以下是interoperability的MSDN鏈接。

希望這會有所幫助!

0

您需要將java客戶端配置爲向服務器發送用戶名令牌。打開Fiddler並比較工作肥皂(wcf客戶端)和非工作的(java)