Получение WCF «Первичная подпись должна быть зашифрована». от FaultContract с ProtectionLevel.None - PullRequest
1 голос
/ 14 мая 2009

У меня есть приложение 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 Ответ

0 голосов
/ 14 мая 2009

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

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

Марк

...