10

NET4.0でネットワーク共有から次のアプリケーションを実行すると、非常に奇妙な問題が発生します。app.configでdefaultProxyセクションを指定すると、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
4

2 に答える 2

13

このマイクロソフトサポート技術情報の記事を参照してください。

症状:

  • ネットワーク共有に保存されているMicrosoft.NETFramework4ベースのアプリケーションを実行します。
  • アプリケーションは、 System.Configuration.ConfigurationManagerクラスの静的メソッドを呼び出します。たとえば、アプリケーションはConfigurationManager.GetSectionメソッドを呼び出します。

このシナリオでは、System.Security.SecurityException例外がスローされ、アプリケーションがクラッシュします。

原因:

この問題は、メソッドがネットワーク共有上のアプリケーションから構成セクションにアクセスできないために発生します。

そのサイトから修正プログラムをリクエストできます。

于 2011-12-19T22:47:28.483 に答える
5

同様の症状が見られました-同じエラーメッセージ

構成セクション「defaultProxy」を設定するための不十分な権限

ファイルが「ブロックされた」コンソールアプリケーションを実行している場合。

ファイルはハイパーリンクからzipファイルをダウンロードすることによってインストールされており、zipファイルは解凍する前に「ブロック解除」されていませんでした。

エクスプローラーからすべてのファイルのブロックを解除する(Windowsでは個別に行う必要があります)>右クリック>[プロパティ]>[ブロック解除]で問題が解決しました。

于 2013-06-04T19:09:15.060 に答える