WCF Obtendo “A assinatura primária deve ser criptografada.” de FaultContract com ProtectionLevel.None

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

  •  21-08-2019
  •  | 
  •  

Pergunta

Eu tenho um aplicativo asp.net existente que fala com carga equilibrada WCF Services (IIS hospedado, na piscina aplicativo em execução na conta configurada como servicePrincipalName, etc.). Os serviços WCF retornar algumas falhas personalizados, todos definidos com FaultContract (typeof (x), ProtectionLevel = ProtectionLevel.None) - estes serviços não são expostos ao público. O cliente usa o 'referência de serviço' classes geradas para acessar os serviços.

Isso tem funcionado bem, mas agora, com a mais recente base de código, estamos recebendo "A assinatura primária deve ser criptografada." exceções no cliente quando o serviço retorna uma dessas falhas. O código de serviço e a configuração permanece inalterada (pelo menos as partes de legado que geram os defeitos). O código de referência de serviço do lado do cliente gerado parece ser o mais alterado (que muitas vezes é removido e recriado).

A configuração de segurança é inalterada durante mais de um ano. Todas as atualizações são bastante atual. Nós testamos este em três ambientes e assim que implantar o novo código base, as falhas começar a gerar exceções. Parece que ele tem que ser nas classes geradas, mas eles são gerados pelo Visual Studio por isso é muito desconcertante.

Isso soa familiar para alguém? Alguma sugestão?

Update: Remover o atributo ProtectionLevel e permitindo-lhe padrão torna o problema 'ir embora', mas estou curioso porque especificando Nenhum faz com que ele falhar. Talvez ele entra em conflito com o nível padrão do contrato de operação ou contrato de serviço, mas esses valores não mudaram no ano passado para que não explica por que tinha trabalhado agora não.

Update: Por que vale a pena, esta mudança no código gen aconteceu entre 2.0.50727.3053 e 2.0.50727.3082 (de acordo com o comentário de tempo de execução-versão no código gerado)

.
Foi útil?

Solução

Eu não tenho tido esse problema sozinho, mas minha questionn é: por que na terra você especificar um "ProtectionLevel = None" em seu contrato culpa? Alguma razão especial para isso?

Se não, eu recomendo fortemente que não especificando que em todos - o padrão é ProtectionLevel = EncryptAndSign e isso é geralmente a sua melhor aposta ao redor. Experimente, a menos que tenha uma razão muito forte e explícita contra ela.

Marc

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top