Разрешение вопросов, связанных с исключениями: System.ServiceModel.Security.MessageSecurityException
Обновлен: Ноябрь 2007
Исключение MessageSecurityException вызывается, когда Windows Communication Foundation (WCF) определяет, что сообщение не защищено правильно или было фальсифицировано. Эта ошибка возникает чаще всего, если выполняются все следующие условия:
Для связи веб–узла или проекта веб–приложения со службой WCF (.svc) используется ссылка на службу WCF через удаленное подключение, такое как подключение к удаленному рабочему столу или службы терминалов.
У вас нет прав администратора на удаленном веб–узле.
Запросы к localhost на удаленном веб–узле обрабатываются ASP.NET Development Server.
Полезные советы
Устраните проблемы с проверкой подлинности NTLM при использовании ASP.NET Development Server.
ASP.NET Development Server обычно отключает безопасность Windows NT Challenge/Response (NTLM), что разрешает анонимный доступ. По умолчанию при выполнении сеанса служб терминалов или использовании удаленного подключения безопасность NTLM включена. Когда NTLM включена, все запросы к localhost проверяются по учетным данным пользователя или процесса, запустившего ASP.NET Development Server. Это снижает угрозу безопасности. Однако WCF также выполняет собственную проверку подлинности и не разрешает учетной записи, не относящейся к администраторам, пользоваться службами WCF.Если удаленный пользователь может запустить веб–узел с помощью ASP.NET Development Server, а также работать с веб–службой или службой WCF, можно создать пользовательскую привязку службы или отключить безопасность NTLM.
Примечание о безопасности. Не рекомендуется отключать безопасность NTLM. Это может представлять угрозу безопасности.
При создании пользовательской привязки службы по–прежнему выполняется защита с помощью проверки подлинности NTLM.
Выполните следующие действия для создания пользовательской службы привязки для службы WCF.
Чтобы создать пользовательскую привязку службы для службы WCF, работающей под ASP.NET Development Server
Откройте файл Web.config для службы WCF, которая вызывает исключение.
Введите следующую информацию в файл Web.config.
<bindings> <customBinding> <binding name="Service1Binding"> <transactionFlow /> <textMessageEncoding /> <httpTransport authenticationScheme="Ntlm" /> </binding> </customBinding> </bindings>
Сохраните изменения и закройте файл Web.config.
В коде WCF или веб–службы измените значение конечной точки на следующее:
<endpoint address="" binding="customBinding" bindingConfiguration="Service1Binding" contract="IService1" />
Это гарантирует, что служба использует пользовательскую привязку.
Добавьте ссылку на эту службу в веб–приложение, которое обращается к службе. (В диалоговом окне Добавить ссылку на службу добавьте ссылку на службу, так же как для исходной службы, которая создавала исключения.)
Выполните следующие действия для отключения безопасности NTLM при работе со ссылкой на службу WCF.
Примечание о безопасности. Не рекомендуется отключать безопасность NTLM. Это может представлять угрозу безопасности.
Чтобы отключить безопасность NTLM
В Обозревателе решений щелкните правой кнопкой мыши имя веб–узла, затем Страницы свойств.
Выберите пункт Параметры запуска, а затем снимите флажок Проверка подлинности NTLM .
Нажмите кнопку ОК.