Как я могу использовать раздел 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", но это определенно не упростит развертывание.


person Brann    schedule 18.02.2009    source источник


Ответы (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/

person Dave R.    schedule 06.03.2009

В качестве альтернативы, если вы работаете в корпоративной среде, вы можете попытаться найти необходимые разрешения, чтобы ваше приложение заработало. Так что не полное доверие, а более конкретная политика безопасности доступа к коду. А затем установите эту политику с помощью групповой политики, установленной на уровне предприятия/пользователя.

person Rudi    schedule 06.03.2009