質問

これによれば 中程度の信頼に関する MSDN 記事, 、中程度の信頼の下:

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

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

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

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

完全更新エラー:

パスへのアクセス 'c: webサイト mywebsite myfile.xml'は拒否されます。

説明:現在のWeb要求の実行中に、未解決の例外が発生しました。エラーの詳細については、コードの発信先の詳細については、スタックトレースを確認してください。

例外の詳細:System.UnauthorizedAccessException:パスへのアクセス 'c: webサイト mywebsite myfile.xml'は拒否されます。

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

ファイルへのASP.NETアクセスを付与するには、Explorerのファイルを右クリックし、[プロパティ]を選択し、[セキュリティ]タブを選択します。追加]をクリックして、適切なユーザーまたはグループを追加します。ASP.NETアカウントを強調表示し、目的のアクセスを確認してください。

ソースエラー:

現在のWeb要求の実行中に、未解決の例外が生成されました。例外の原点と位置に関する情報は、以下の例外スタックトレースを使用して識別できます。

スタックトレース:

[UnauthorizedAccessException:パスへのアクセス
System.io .__ ERROR.WINIOERROR(INT32 ERRORCODE、STRING MAYTYFULPATH)+12892935 SYSTEM.IO.FILESTREAM.INIT(STRING PATH、FILEMODE MODE、FILEACCESS ACCESS、INT32 RIGHTS、BOOLEANユーザー視力、FILESHAREシェア、INT32バッファイズ、ファイルオプション、セキュリティ_ATTRIBUTES_ATTRIBUTETTRS SECATTRS SECATTRS 、String MSGPath、Boolean Bfromproxy、Boolean UselongPath)+2481
System.io.filestream..Ctor(String Path、FileMode Mode、FileAccess Access、Fileshare Share、Int32 Buffersize、FileOptions Options、String MSGPath、Boolean Bfromproxy)+229 System.io.filestream..ctor(String Path、FileMode Mode、 FileAccess Access、Fileshare Share)+102
System.xml.xmlwritersettings.createwriter(String outputFileName)+5224496
System.xml.linq.xelement.save(string filename、saveoptions options)+108
mesoboard.services.siteconfig.updatecache()+1971 mesoboard.web.mvcapplication.onapplicationstarted()+62 ninject.web.mvc.ninjecthttpapplication.application_start()+60444444404

[HTTP例外 (0x80004005):パスへのアクセス
System.web.httpapplicationfactory.ensureAppStartCallededForIntegratedMode(httpContext Context、httpapplication App)+3985477 System.web.httpapplication.registereventsubscriptionswithiis(intptr aptext、httpcontext contembolex
System.web.httpapplication.initspecial(httpapplicationstate状態、MethodInfo [] Handlers、intptr appContext、httpcontext Context)+325 System.httpapplicationFactory.getspecialApplicationinStance(intcontext、htpcontext、httpcontextextの +407 .InitializeApplication( intptr appContext)+375

[HTTP例外 (0x80004005):パスへのアクセス
System.Web.httpruntime.firstrequestinit(httpcontextコンテキスト)+11524352
System.web.httpruntime.ensurefirstrequestinit(httpcontext Context)+141
System.Web.httpruntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest WR、httpContextコンテキスト)+4782309

役に立ちましたか?

解決

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

WebDir/データ
webdir/data/myfile.xml

webdir/wwwroot
webdir/wwwroot/default.aspx

他のヒント

IOの許可は、ファイルの許可の問題にすぎないように聞こえます。ホスティングプロバイダーにファイルをアップロードしたときはいつでも、コントロールパネルにログインし、IISアカウントの書き込みアクセスを手動で提供する必要があります。

別の注意点として、XMLファイルの場所がセキュリティの問題を提起します。ファイルを「〜/app_data/」フォルダーに入れてみてください。これは、データフォルダーよりも制限されている特別な.netフォルダーです。www.yoursite.com/data/myfile.xmlにアクセスしてダウンロードできます。一方、app_dataフォルダー内のファイルはWebからダウンロードできません。

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

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

MIDION TRUSTは、アプリケーションが$ AppDIRにのみアクセスできることを指定します。 Medium Trustレベルをカスタマイズして、FileiOpermissionを変更して$ AppDir以外のディレクトリを含めることにより、Medium Trustに追加のアクセスを追加できます。ただし、カスタマイズされた中程度の信頼レベルでもserver.mappath( "/")を呼び出すと、タイプ 'System.security.permissions.fileiopermission、mscorlib、version =の許可を得るための例外が得られることがわかりました。 4.0.0.0、culture = neutral、publickeytoken = b77a5c561934e089 'failed "

これは、$ appdirの外側のファイルシステムへのアクセスを要求しているためです。最終的には、Webアプリケーションからserver.mappath()にすべての呼び出しを削除する必要がありました。

私はgodaddyにウェブサイトを設定し、書き込みアクセスを有効にすることができる唯一の方法は、それを有効にすることであることがわかりました。 Webルート全体 しかし、それはちょうどそのホスティング計画の制限だったかもしれませんか?

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top