2012-03-22 65 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)