Как я могу использовать раздел system.net моего app.config в среде с частичным доверием?
Я развернул приложение WCF с помощью clickonce. Он подключается к моему серверу, используя https, и все работает нормально
Я использую прокси по умолчанию, когда это необходимо, благодаря следующему коду:
<configSections>
<sectionGroup name="system.net" type="System.Net.Configuration.NetSectionGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<section name="defaultProxy" type="System.Net.Configuration.DefaultProxySection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
</sectionGroup>
</configSections>
<system.net>
<defaultProxy useDefaultCredentials="true"/>
</system.net>
В режиме полного доверия все работает нормально
Теперь, если я установил в настройках безопасности частичное доверие, он работает нормально, если прокси-сервер не задействован, но если я пытаюсь запустить свое программное обеспечение в корпоративной среде, прокси-сервер больше не определяется автоматически.
Из моего понимания:
Параметры configSections больше не анализируются в средах с частичным доверием, если не установлен атрибут requirePermission, например:
<section requirePermission="false" name="defaultProxy">
При установке этого атрибута выдается исключение System.Configuration.ConfigurationException со следующим сообщением об ошибке:
Имя раздела или группы defaultProxy уже определено. Обновления могут происходить только на уровне конфигурации, где это определено.
Раздел defaultproxy действительно уже определен в файле machine.config:
<section name="defaultProxy" type="System.Net.Configuration.DefaultProxySection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
Тем не менее, это не является проблемой, если не установлено значение requirePermission. Другими словами, кажется, что сообщение об ошибке должно быть скорее:
Имя раздела или группы defaultProxy уже определено с другим параметром requirePermission. Обновления могут происходить только на уровне конфигурации, где это определено.
Кто-нибудь сталкивался с такой же проблемой? Можно ли молча использовать прокси по умолчанию из приложения WCF в режиме частичного доверия? Я также пытался установить прокси программно, но безуспешно
System.Net.WebProxy proxy = new WebProxy();
proxy.UseDefaultCredentials = true;
WebRequest.DefaultWebProxy = proxy;
Атрибут useDefaultWebProxy атрибута wshttpbinding устанавливается с самого начала, но, похоже, не работает ни в среде с частичным, ни с полным доверием, без правильно определенного раздела system.net.defaultProxy:
<binding name="WebBinding" useDefaultWebProxy="true">
Я думаю, я мог бы попросить своих клиентов обновить их локальные файлы machine.config, чтобы добавить необходимый defaultProxy useDefaultCredentials="true", но это определенно не облегчит развертывание.
2 ответа
В качестве альтернативы, если вы работаете в корпоративной среде, вы можете попытаться найти необходимые разрешения для работы вашего приложения. Так что не полное доверие, а более конкретная политика безопасности доступа к коду. Затем настройте эту политику с помощью групповой политики, установленной на уровне предприятия / уровне пользователя.
Я считаю, что это известная проблема, возможно связанная с транспортировкой закрытых ключей. Здесь есть запись MS Connect:
https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=354646
Надеюсь, я правильно понял вопрос. Если ваши проблемы являются результатом этой ошибки, то похоже, что пока нет исправлений ETA. Однако может существовать обходной путь, связанный с ручным запросом учетных данных. Очевидно, что это не идеальный вариант, но он может дать вам еще один вариант перед развертыванием в производственных системах.
Здесь есть дополнительная дискуссия на форумах MSDN:
http://social.msdn.microsoft.com/Forums/en-US/wcf/thread/c19b726b-573b-4157-91fd-051724f04180/