Ошибка WCF-обработчику безопасности не удалось найти заголовок безопасности в сообщении
Я получаю то, что теперь кажется ошибкой безопасности в моей службе WCF. Первоначально моя ошибка была о состоянии falted (удалено с помощью прокси-сервера клиента, чтобы очистить эту ошибку), но нашли больше информации, включив трассировку.
Я не смог запустить свое решение после обнаружения этой ошибки, и даже моя резервная копия теперь получает ту же ошибку. Я не уверен, что вызвало это, я отменил изменения, которые я сделал (ничего, относящегося к WCF), и все еще получаю та же ошибка.
ошибка трассировки - Система.Средство servicemodel.Безопасность.MessageSecurityException: обработчику безопасности не удалось найти заголовок безопасности в сообщении. Это может быть связано с тем, что сообщение является необеспеченной ошибкой или существует связывающее несоответствие между сообщающими сторонами. Это может произойти, если служба настроена на безопасность, а клиент не использует безопасность.
Я не уверен, что мне нужно сделать, чтобы исправить это, любая помощь будет будьте полезны. Приложение ранее работало.
3 ответов
несмотря на несоответствие привязки, вы можете заставить WCF работать, установив
безопасность
enableUnsecuredResponse= "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>
Если вы хотите избежать настройки пользовательской привязки, вы можете получить ссылку на текущую привязку 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);