2010-06-10 84 views
6

我收到了我的WCF服务中出现的安全错误。最初我的错误是关于falted状态(使用客户端代理清除此错误时删除),但通过启用跟踪发现了更多信息。WCF错误 - 安全处理器无法在邮件中找到安全标头

遇到此错误后,我一直无法运行我的解决方案,甚至现在我的备份副本也得到相同的错误。我不确定是什么导致了这种情况发生,我撤销了我所做的更改(与WCF无关)并仍然出现相同的错误。

跟踪错误是 - System.ServiceModel.Security.MessageSecurityException:安全处理器无法在消息中找到安全标头。这可能是因为该消息是不安全的错误,或者是因为通信方之间存在绑定不匹配。如果服务配置了安全性并且客户端没有使用安全性,则会发生这种情况。

我不太确定我需要做什么来解决这个问题,任何帮助都将是有用的。该应用程序以前工作。

回答

6

尽管结合不符,您可以强制WCF通过设置

安全
enableUnsecuredResponse =“真正的工作“

下面是更多的代码样本Ë,你可以用它来比较对自己设置...

<security enableUnsecuredResponse="true" 
      authenticationMode="MutualCertificateDuplex" 
      defaultAlgorithmSuite="TripleDesRsa15" 
      includeTimestamp="false" 
      messageSecurityVersion="Default" > 
    <issuedTokenParameters defaultMessageSecurityVersion="Default"> 
    <issuer address="" binding="" bindingConfiguration=""> 
     <identity> 
     <certificateReference storeLocation="CurrentUser" 
           x509FindType="FindBySerialNumber" 
           findValue="0b 8d a9 18 59 65 36 b9 de 65 8b 21 ba 6c ab cc" 
           isChainIncluded="true" /> 
     </identity> 
    </issuer> 
    </issuedTokenParameters> 
</security> 
5

如果你想避免配置自定义绑定,就可以得到当前的basicHttpBinding的一个参考,创建一个自定义从中约束力,包括EnabledUnsecuredResponse属性:

//client is a reference to your gerenated proxy client class 
    var elements = client.Endpoint.Binding.CreateBindingElements(); 
    elements.Find<SecurityBindingElement>().EnableUnsecuredResponse = true; 
    client.Endpoint.Binding = new CustomBinding(elements);