Ошибка WCF-обработчику безопасности не удалось найти заголовок безопасности в сообщении

Я получаю то, что теперь кажется ошибкой безопасности в моей службе WCF. Первоначально моя ошибка была о состоянии falted (удалено с помощью прокси-сервера клиента, чтобы очистить эту ошибку), но нашли больше информации, включив трассировку.

Я не смог запустить свое решение после обнаружения этой ошибки, и даже моя резервная копия теперь получает ту же ошибку. Я не уверен, что вызвало это, я отменил изменения, которые я сделал (ничего, относящегося к WCF), и все еще получаю та же ошибка.

ошибка трассировки - Система.Средство servicemodel.Безопасность.MessageSecurityException: обработчику безопасности не удалось найти заголовок безопасности в сообщении. Это может быть связано с тем, что сообщение является необеспеченной ошибкой или существует связывающее несоответствие между сообщающими сторонами. Это может произойти, если служба настроена на безопасность, а клиент не использует безопасность.

Я не уверен, что мне нужно сделать, чтобы исправить это, любая помощь будет будьте полезны. Приложение ранее работало.

3 ответов


вы можете обнаружить, что ваша проблема связана с этой нитью:

ошибки службы WCF после установки обновлений WindowsXP


несмотря на несоответствие привязки, вы можете заставить 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);