Конфигурация службы WCF странное поведение - сообщение запроса должно быть защищено - PullRequest
1 голос
/ 18 июля 2011

Я нахожусь на .NET 4.0, у меня есть служба wcf, которая реализует два контракта, один с уровнем защиты и один без защиты.Оба указывают в действии и в ReplyAction значение «*».

Теперь, если я настраиваю эту службу внутри проекта веб-сайта, все работает, но если я настраиваю эту же службу внутри проекта веб-приложения, еслиЯ пытаюсь просмотреть страницу службы в браузере для конечной точки по умолчанию, я получаю сообщение об ошибке «Сообщение запроса должно быть защищено. Это требуется при выполнении операции контракта (« IContractSigned »,« http://myservice/contracts'). ». Защита должна быть обеспечена.с помощью привязки ('BasicHttpBinding', 'http://tempuri.org/'). "

И проект веб-сайта, и проект веб-приложения имеют одинаковый web.config.

Теперь я пытаюсь инвестироватьно невозможно найти простое решение или обсуждение. Любая идея? Почему тип проекта влияет на правильность конфигурации? Заранее спасибо

Ответы [ 2 ]

1 голос
/ 03 февраля 2012

Уровень защиты EncryptAndSign для сервисных контрактов требует, чтобы привязка обеспечивала некоторый способ шифрования и пения, то есть привязка должна быть безопасной.

Возможно, ваша служба использует безопасность на транспортном уровне, полагаясь на IIS для защиты канала одним из своих сертификатов сервера?Разница между развертыванием веб-сайта и развертыванием веб-приложения может заключаться в способности IIS защитить канал с помощью сертификата сервера.

Если вы используете безопасность в режиме сообщений, ваша служба должна объявить, какой сертификат использовать, и не должна создаватьлюбая разница в том, как служба развернута.

0 голосов
/ 25 сентября 2012

Я боролся с тем же исключением, и нашел это :

Когда в контракте не указан явно уровень защиты и базовая привязка поддерживает безопасность (будь то на транспортеили уровень сообщения), эффективный уровень защиты для всего контракта - ProtectionLevel.EncryptAndSign.Если привязка не поддерживает безопасность (например, BasicHttpBinding), эффективный System.Net.Security.ProtectionLevel равен ProtectionLevel.None для всего контракта.В результате, в зависимости от привязки конечной точки, клиенты могут требовать другую защиту безопасности на уровне сообщения или транспортного уровня, даже если в контракте указано ProtectionLevel.None.

Итак, если вы не укажете ProtectionLevel в атрибуте ServiceContractWCF определит ProtectionLevel на основе вашего web.config.Если вы используете, например, Ws2007 и BasicHttpBinding, BasicHttpBinding завершится с вашим исключением.Тогда у вас есть 3 варианта:

  1. Удалите все защищенные привязки для вашего контракта и оставьте только BasicHttpBinding.
  2. Установите уровень защиты для контракта, который предоставляется через BasicHttpBinding, следующим образом:

    [ServiceContract (ProtectionLevel = ProtectionLevel.None)]

  3. Обеспечить некоторую безопасность для BasicHttpBinding.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...