2010-06-10 44 views
6

Recibo lo que ahora parece ser un error de seguridad en mi Servicio WCF. Originalmente, mi error fue sobre un estado fallido (eliminado utilizando el proxy del cliente para borrar este error), pero he encontrado más información mediante la habilitación del rastreo.WCF Error - El procesador de seguridad no pudo encontrar un encabezado de seguridad en el mensaje

No he podido ejecutar mi solución después de encontrar este error, e incluso mi copia de seguridad ahora recibe el mismo error. No estoy seguro de lo que ha causado que esto suceda, deshice los cambios que hice (nada relacionado con WCF) y aún recibo el mismo error.

El error del rastreo es - System.ServiceModel.Security.MessageSecurityException: el procesador de seguridad no pudo encontrar un encabezado de seguridad en el mensaje. Esto puede deberse a que el mensaje es un error no asegurado o porque existe una falta de correspondencia vinculante entre las partes que se comunican. Esto puede ocurrir si el servicio está configurado para seguridad y el cliente no está usando seguridad.

No estoy muy seguro de lo que tengo que hacer para solucionarlo, cualquier ayuda sería útil. La aplicación ya estaba funcionando.

Respuesta

6

A pesar de la falta de coincidencia de unión puede forzar WCF para trabajar estableciendo el

Seguridad
enableUnsecuredResponse = "true "

A continuación le mostramos más de un código sampl e que se puede utilizar para comparar contra sus propios ajustes ...

<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

Si se quiere evitar la configuración de un enlace de costumbre, se puede obtener una referencia a la basicHttpBinding actual, crear una unión de ella a medida, e incluyen la propiedad 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); 
Cuestiones relacionadas