Исключение при указании defaultProxy в app.config при запуске приложения NET4.0 из общего сетевого ресурса - PullRequest
10 голосов
/ 30 ноября 2011

Мы видим очень странную проблему при запуске следующего приложения из общей сетевой папки под NET4.0. При указании секции defaultProxy в app.config a System.Net.WebException выбрасывается. Нет проблем при запуске с локального диска.

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

Есть идеи, как мы можем обойти эту проблему?

Кто-нибудь еще сталкивался с этой проблемой или кто-нибудь знает, почему это может происходить?

Пример программы

using System;
using System.Net;

namespace ProxyTest
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                String s = new WebClient().DownloadString("http://www.google.com");
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
            }
        }
    }
}

app.config

  <?xml version="1.0"?>
  <configuration>
    <system.net>
      <defaultProxy useDefaultCredentials="true"/>
    </system.net>
    <startup>
      <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0,Profile=Client"/>
    </startup>
  </configuration>

Сведения об исключении

System.Net.WebException: An exception occurred during a WebClient request. ---> System.Configuration.ConfigurationErrorsException: Insufficient permissions for setting the configuration section 'defaultProxy'. ---> System.Security.SecurityException: Request for the permission of type 'System.Net.WebPermission, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' failed.
   at System.Security.CodeAccessSecurityEngine.Check(Object demand, StackCrawlMark& stackMark, Boolean isPermSet)
   at System.Security.CodeAccessSecurityEngine.Check(CodeAccessPermission cap, StackCrawlMark& stackMark)
   at System.Security.CodeAccessPermission.Demand()
   at System.Net.Configuration.DefaultProxySection.PostDeserialize()
   --- End of inner exception stack trace ---
   at System.Configuration.BaseConfigurationRecord.EvaluateOne(String[] keys, SectionInput input, Boolean isTrusted, FactoryRecord factoryRecord, SectionRecord sectionRecord, Object parentResult)
   at System.Configuration.BaseConfigurationRecord.Evaluate(FactoryRecord factoryRecord, SectionRecord sectionRecord, Object parentResult, Boolean getLkg, Boolean getRuntimeObject, Object& result, Object& resultRuntimeObject)
   at System.Configuration.BaseConfigurationRecord.GetSectionRecursive(String configKey, Boolean getLkg, Boolean checkPermission, Boolean getRuntimeObject, Boolean requestIsHere, Object& result, Object& resultRuntimeObject)
   at System.Configuration.BaseConfigurationRecord.GetSectionRecursive(String configKey, Boolean getLkg, Boolean checkPermission, Boolean getRuntimeObject, Boolean requestIsHere, Object& result, Object& resultRuntimeObject)
   at System.Configuration.BaseConfigurationRecord.GetSectionRecursive(String configKey, Boolean getLkg, Boolean checkPermission, Boolean getRuntimeObject, Boolean requestIsHere, Object& result, Object& resultRuntimeObject)
   at System.Configuration.BaseConfigurationRecord.GetSection(String configKey, Boolean getLkg, Boolean checkPermission)
   at System.Configuration.BaseConfigurationRecord.GetSection(String configKey)
   at System.Configuration.ClientConfigurationSystem.System.Configuration.Internal.IInternalConfigSystem.GetSection(String sectionName)
   at System.Configuration.ConfigurationManager.GetSection(String sectionName)
   at System.Configuration.PrivilegedConfigurationManager.GetSection(String sectionName)
   at System.Net.Configuration.DefaultProxySectionInternal.GetSection()
   at System.Net.WebRequest.get_InternalDefaultWebProxy()
   at System.Net.HttpWebRequest..ctor(Uri uri, ServicePoint servicePoint)
   at System.Net.HttpRequestCreator.Create(Uri Uri)
   at System.Net.WebRequest.Create(Uri requestUri, Boolean useUriBase)
   at System.Net.WebRequest.Create(Uri requestUri)
   at System.Net.WebClient.GetWebRequest(Uri address)
   at System.Net.WebClient.DownloadDataInternal(Uri address, WebRequest& request)
   --- End of inner exception stack trace ---
   at System.Net.WebClient.DownloadDataInternal(Uri address, WebRequest& request)
   at System.Net.WebClient.DownloadString(Uri address)
   at System.Net.WebClient.DownloadString(String address)
   at ProxyTest.Program.Main(String[] args) in Y:\Program.cs:line 12

Ответы [ 2 ]

13 голосов
/ 20 декабря 2011

См. эту статью базы знаний Майкрософт:

Симптомы:

  • Вы запускаете приложение на основе Microsoft .NET Framework 4, которое хранитсяв общей сетевой папке.
  • Приложение вызывает статический метод в классе System.Configuration.ConfigurationManager .Например, приложение вызывает метод ConfigurationManager.GetSection .

В этом сценарии выдается исключение System.Security.SecurityException , а затем приложениевылетает.

Причина:

Проблема возникает из-за сбоя метода доступа к разделу конфигурации из приложения на общем сетевом ресурсе.

Youможно запросить исправление с этого сайта.

5 голосов
/ 04 июня 2013

Мы видели похожие симптомы - одно и то же сообщение об ошибке

Недостаточно прав для настройки раздела конфигурации 'defaultProxy'

при запуске консольного приложения, где файлы были«заблокирован».

Файлы были установлены путем загрузки zip-файла по гиперссылке, и zip-файл не был «разблокирован» перед разархивированием.

Разблокировка всех файлов (вы должны сделать их отдельно в Windows) из Проводника> щелкните правой кнопкой мыши> Свойства> Разблокировать, чтобы устранить проблему.

...