Как я могу использовать раздел 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/

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