Conseguir WCF “La firma primaria debe estar encriptada.” De FaultContract con ProtectionLevel.None

StackOverflow https://stackoverflow.com/questions/860546

  •  21-08-2019
  •  | 
  •  

Pregunta

Tengo una aplicación asp.net existente que habla para cargar servicios WCF equilibradas (IIS alojado, en grupo de aplicación se ejecuta bajo la cuenta configurada como servicePrincipalName, etc.). Los servicios WCF regresan algunos fallos personalizados, todos definidos con FaultContract (typeof (x), ProtectionLevel = ProtectionLevel.None) - estos servicios no están expuestos al público. El cliente utiliza las clases 'de referencia servicio' generada para acceder a los servicios.

Esto ha funcionado bien, pero ahora, con la última base de código, estamos consiguiendo "La firma primaria debe estar encriptada." excepciones en el cliente cuando el servicio devuelve uno de dichos errores. El código de servicio y la configuración es sin cambios (al menos las partes de legado que generan los defectos). La referencia de servicio de cliente genera el código parece ser el más cambiado (que a menudo se retira y se vuelve a crear).

La configuración de seguridad es sin cambios durante más de un año. Todos los cambios son bastante actual. Hemos probado esto en tres ambientes y tan pronto como hacemos uso de la nueva base de código, los fallos de comenzar a generar excepciones. Parece que tiene que estar en las clases generadas, sino que son generados por Visual Studio lo que es muy desconcertante.

¿Le suena familiar a alguien? ¿Alguna sugerencia?

Actualización: Extracción del atributo ProtectionLevel y permitiendo que por defecto hace que el problema 'sale', pero tengo curiosidad por qué especificar Ninguno provoca que falle. Tal vez está en conflicto con el nivel predeterminado del contrato o del contrato del servicio de operaciones, pero esos valores no han cambiado en el último año por lo que no explica por qué lo que había funcionado ahora no lo hace.

Actualización:. Por lo que vale la pena, este cambio en el código de generación pasó entre 2.0.50727.3053 y 2.0.50727.3082 (de acuerdo con el comentario de tiempo de ejecución de versión en el código generado)

¿Fue útil?

Solución

No he tenido este problema, pero mi questionn es: ¿por qué no se especifica un "ProtectionLevel = None" en su contrato culpa? Alguna razón en particular para eso?

Si no, te recomiendo encarecidamente que no se especifica que en todos - el valor predeterminado es ProtectionLevel = EncryptAndSign y eso es por lo general la mejor opción por todas partes. Probarlo, a menos que tenga una razón muy fuerte y explícita en contra de ella.

Marc

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top