Получение WCF "Первичная подпись должна быть зашифрована". от FaultContract с ProtectionLevel.None

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

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

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

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

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

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

1 ответ

Решение

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

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

Марк

Другие вопросы по тегам