另一个MessageSecurityException问题

时间:2012-03-22 15:30:25

标签: c# wcf wcf-security wcf-binding

所以我构建了一个使用基本Auth Soap 1.2的服务。配置如下:

<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客户端,但我确信它使用基本的Auth调用该服务。

有什么建议吗?

2 个答案:

答案 0 :(得分:1)

我不是Java专家,但据我所知,Java客户端无法动态实现SOAP 1.2。 Java客户端需要外部库来补充1.2 SOAP消息中必要的策略/安全头。

我已指示我的Java客户端使用Metro库以使用我的WCF服务。 (我正在使用与您类似的绑定。)以下是blog如何包含Metro库。

以下是interoperability的MSDN链接。

希望这有帮助!

答案 1 :(得分:0)

您需要配置java客户端以向服务器发送用户名令牌。打开Fiddler并将工作肥皂(wcf客户端)与非工作肥皂(java)进行比较