5

medium-trustに関するこの MSDN の記事によると、 medium-trust の下で:

FileIOPermission は制限されています。これは、アプリケーションの仮想ディレクトリ階層内のファイルにのみアクセスできることを意味します。アプリケーションには、アプリケーションの仮想ディレクトリ階層に対する読み取り、書き込み、追加、およびパス検出のアクセス許可が付与されます。

ただし、現在のホスティング プロバイダーは中程度の信頼でアプリケーションを実行しており、アプリケーションのルート フォルダー内のファイルを読み書きしようとすると、access to path 'myfile.xml' deniedエラーが発生します。

このファイルは、次のコードを使用して読み取られます

XElement file = XElement.Load(HttpContext.Current.Server.MapPath("~/myfile.xml"));

完全な更新エラー:

パス「C:\WebSites\mywebsite\myfile.xml」へのアクセスが拒否されました。

説明: 現在の Web 要求の実行中に未処理の例外が発生しました。エラーの詳細とコード内のどこでエラーが発生したかについては、スタック トレースを確認してください。

例外の詳細: System.UnauthorizedAccessException: パス 'C:\WebSites\mywebsite\myfile.xml' へのアクセスが拒否されました。

ASP.NET は、要求されたリソースへのアクセスを許可されていません。リソースへのアクセス権を ASP.NET 要求 ID に付与することを検討してください。ASP.NET には、アプリケーションが偽装されていない場合に使用されるベース プロセス ID (通常、IIS 5 または IIS 6 および IIS 7 のネットワーク サービスの {MACHINE}\ASPNET、および IIS 7.5 の構成済みアプリケーション プール ID) があります。アプリケーションが を介して偽装している場合、ID は匿名ユーザー (通常は IUSR_MACHINENAME) または認証された要求ユーザーになります。

ファイルへの ASP.NET アクセスを許可するには、エクスプローラーでファイルを右クリックし、[プロパティ] を選択して、[セキュリティ] タブを選択します。[追加] をクリックして、適切なユーザーまたはグループを追加します。ASP.NET アカウントを強調表示し、必要なアクセスのボックスをオンにします。

ソース エラー:

現在の Web 要求の実行中に未処理の例外が生成されました。例外の発生元と場所に関する情報は、以下の例外スタック トレースを使用して特定できます。

スタックトレース:

[UnauthorizedAccessException: パス 'C:\WebSites\mywebsite\myfile.xml' へのアクセスが拒否されました。]
System.IO.__Error.WinIOError(Int32 errorCode, String MaybeFullPath) +12892935 System.IO.FileStream.Init(String path, FileMode モード、FileAccess アクセス、Int32 権限、Boolean useRights、FileShare 共有、Int32 bufferSize、FileOptions オプション、SECURITY_ATTRIBUTES secAttrs、String msgPath、Boolean bFromProxy、Boolean useLongPath) +2481
System.IO.FileStream..ctor(String パス、FileMode モード、 FileAccess アクセス、FileShare 共有、Int32 bufferSize、FileOptions オプション、String msgPath、Boolean bFromProxy) +229 System.IO.FileStream..ctor(String パス、FileMode モード、FileAccess アクセス、FileShare 共有) +102
System.Xml.XmlWriterSettings.CreateWriter(String outputFileName) +5224496
System.Xml.Linq.XElement.Save(String fileName, SaveOptions オプション) +108
mesoBoard.Services.SiteConfig.UpdateCache() +1971 mesoBoard.Web.MvcApplication.OnApplicationStarted( ) +62 Ninject.Web.Mvc.NinjectHttpApplication.Application_Start() +604

[HttpException (0x80004005): パス 'C:\WebSites\mywebsite\myfile.xml' へのアクセスが拒否されました。]
System.Web.HttpApplicationFactory.EnsureAppStartCalledForIntegratedMode(HttpContext コンテキスト、HttpApplication アプリ) +3985477 System.Web.HttpApplication.RegisterEventSubscriptionsWithIIS( IntPtr appContext、HttpContext コンテキスト、MethodInfo[] ハンドラー) +191
System.Web.HttpApplication.InitSpecial(HttpApplicationState 状態、MethodInfo[] ハンドラー、IntPtr appContext、HttpContext コンテキスト) +325 System.Web.HttpApplicationFactory.GetSpecialApplicationInstance(IntPtr appContext、HttpContext コンテキスト) ) +407 System.Web.Hosting.PipelineRuntime.InitializeApplication(IntPtr appContext) +375

[HttpException (0x80004005): パス 'C:\WebSites\mywebsite\myfile.xml' へのアクセスが拒否されました。]
System.Web.HttpRuntime.FirstRequestInit(HttpContext コンテキスト) +11524352
System.Web.HttpRuntime.EnsureFirstRequestInit(HttpContext コンテキスト) +141
System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest wr、HttpContext コンテキスト) +4782309

4

5 に答える 5

1

Web サイトを実行しているアプリケーション プールのユーザー アカウントに、ファイル/フォルダーへの読み取り/書き込みアクセス許可があることを確認する必要があります。デフォルトでは、読み取り権限は必要ですが、書き込み権限は必要ないと思います。また、セキュリティ上の理由から、そのファイルを wwwroot フォルダーから、アプリケーション全体が破損しない場所に移動することをお勧めします。

webdir/data
webdir/data/ myfile.xml

webdir/wwwroot
webdir/wwwroot/default.aspx

于 2010-06-27T05:24:10.347 に答える
0

XElementクラスを使用しています。名前空間「System.Xml.Linq」は、ホスティングの「中レベル」構成ではおそらく許可されていません。中レベルの信頼でLinqを使用するには、次の手順に従ってください

于 2010-06-27T08:50:22.503 に答える
0

あなたの IO アクセス許可は、ファイルのアクセス許可の問題にすぎないようです。ホスティング プロバイダーにファイルをアップロードするたびに、コントロール パネルにログインし、手動で IIS アカウントに書き込みアクセスを許可する必要があることを知っています。読み取りアクセスは自動的に許可される唯一のアクセス許可だからです。

別の注意として、xml ファイルの場所はセキュリティ上の問題を引き起こします。ファイルを「~/App_Data/」フォルダーに入れてみてください。これは、データフォルダーよりも制限された特別な .NET フォルダーです。現時点では、www.yoursite.com/data/myfile.xml にアクセスしてダウンロードできます。一方、App_Data フォルダー内のファイルは Web 経由でダウンロードできません。

Visual Studio で使用される App_Data フォルダーは何ですか?

于 2010-06-27T07:29:00.993 に答える
0

Medium Trust は、アプリケーションが $AppDir にのみアクセスできることを指定します。$AppDir 以外のディレクトリを含めるように FileIOPermission を変更することにより、中程度の信頼レベルをカスタマイズして、中程度の信頼へのアクセスを追加することができます。ただし、カスタマイズされた中程度の信頼レベルでも Server.MapPath("/") を呼び出すと、「タイプ 'System.Security.Permissions.FileIOPermission, mscorlib, Version= のアクセス許可の要求4.0.0.0、カルチャ = ニュートラル、PublicKeyToken = b77a5c561934e089' に失敗しました"

これは、$AppDir の外部にあるファイル システムへのアクセスを要求していることが原因であるというのが私の理論です。最終的に、Web アプリケーションから Server.MapPath() へのすべての呼び出しを削除する必要がありました。

于 2014-09-03T20:03:11.360 に答える
-1

GoDaddyでウェブサイトを設定したところ、書き込みアクセスを有効にする唯一の方法は、ウェブルート全体で有効にすることでしたが、それがホスティングプランの制限だったのではないでしょうか。

于 2010-07-08T13:06:38.430 に答える