我的 WCF 服务中出现了安全错误。 最初我的错误是关于错误状态(使用客户端代理删除以清除此错误),但通过启用跟踪找到了更多信息。
遇到此错误后,我无法运行我的解决方案,甚至我的备份副本现在也出现相同的错误。 我不确定是什么导致了这种情况发生,我撤消了所做的更改(与 WCF 无关),但仍然遇到相同的错误。
跟踪的错误是 - System.ServiceModel.Security.MessageSecurityException:安全处理器无法在消息中找到安全标头。这可能是因为该消息是不安全的错误,或者是因为通信双方之间存在绑定不匹配。 如果服务配置为安全性并且客户端未使用安全性,则可能会发生这种情况。
我不太确定需要做什么来解决这个问题,任何帮助都会很有用。 该应用程序之前可以运行。
如果您想避免配置自定义绑定,您可以获取对当前 basicHttpBinding 的引用,从中创建自定义绑定,并包含 EnabledUnsecuredResponse 属性:
//client is a reference to your generated proxy client class
var elements = client.Endpoint.Binding.CreateBindingElements();
elements.Find<SecurityBindingElement>().EnableUnsecuredResponse = true;
client.Endpoint.Binding = new CustomBinding(elements);
尽管绑定不匹配,您可以通过设置
强制 WCF 工作安全
启用UnsecuredResponse =“true”
下面是更多代码示例,您可以使用它与您自己的设置进行比较...
<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>
如果有人在迁移到 .Net Core 时遇到此问题并因没有
SecurityBindingElement
而出现编译器错误,请替换此行
elements.Find<SecurityBindingElement>().EnableUnsecuredResponse = true;
用这条线
elements.Find<TransportSecurityBindingElement>().EnableUnsecuredResponse = true;