2010-06-10 1 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);