WCF получает «основную подпись должна быть зашифрована». от Bullcontract с ProtectionLevel.none

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

  •  21-08-2019
  •  | 
  •  

Вопрос

У меня есть существующее приложение asp.net, которое взаимодействует со службами wcf с балансировкой нагрузки (размещено на сервере iis, в пуле приложений, работающем под учетной записью, настроенной как servicePrincipalName и т. д.).Службы wcf возвращают несколько пользовательских ошибок, все из которых определены с помощью FaultContract(typeof(x), ProtectionLevel = ProtectionLevel.None) — эти службы не доступны для общественности.Клиент использует сгенерированные классы «ссылки на службы» для доступа к службам.

Это работало нормально, но теперь, с последней кодовой базой, мы получаем «основная подпись должна быть зашифрована». Исключения на клиенте, когда служба возвращает одно из этих ошибок.Сервисный код и конфигурация не изменяются (по крайней мере, устаревшие части, вызывающие неисправности).Код, сгенерированный ссылкой на службу на стороне клиента, выглядит наиболее измененным (его часто удаляют и создают заново).

Конфигурация безопасности не меняется уже более года.Все обновления довольно актуальны.Мы протестировали это в трех средах, и как только мы развернем новую базу кода, ошибки начнут генерировать исключения.Похоже, это должно быть в сгенерированных классах, но они генерируются Visual Studio, поэтому это очень сбивает с толку.

Это кому-нибудь знакомо?Какие-либо предложения?

Обновлять:Удаление атрибута ProtectionLevel и предоставление ему значения по умолчанию устраняет проблему, но мне любопытно, почему указание None приводит к сбою.Возможно, это противоречит уровню по умолчанию контракта на эксплуатацию или контракта на обслуживание, но эти значения не изменились за последний год, поэтому это не объясняет, почему то, что работало сейчас, не работает.

Обновлять:Как бы то ни было, это изменение в генерации кода произошло между 2.0.50727.3053 и 2.0.50727.3082 (согласно комментарию версии времени выполнения в сгенерированном коде).

Это было полезно?

Решение

Я сам не сталкивался с этой проблемой, но мой вопрос:с какой стати вы указываете «ProtectionLevel=None» в своем контракте об ошибках?Какая-то особая причина для этого?

Если нет, я настоятельно рекомендую вообще не указывать это — по умолчанию используется ProtectionLevel=EncryptAndSign, и обычно это лучший выбор.Попробуйте, если только у вас нет очень веских и явных причин против этого.

Марк

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top