ディレクトリを作成し、Windows Server2008でホストされているWebアプリケーション内の共有フォルダーにファイルを書き込んでいます。ApplicationPoolIdentityのIDでアプリケーションプールを実行しています。
これまでのセットアップの概要を説明します。Webアプリケーションのルートディレクトリのルートに対するアクセス許可を、「IUSR」と「IIS APPPOOL\MYPOOL」の2つの異なるユーザーに設定しました。アプリケーションプールの名前として「MYPOOL」という名前を使用しているので、簡単に参照できます。
アプリケーションは、共有フォルダーを変更して書き込むことができません。ディレクトリを作成して書き込んでいる共有フォルダを右クリックし、[セキュリティ]タブをクリックしました。次に、「編集」をクリックしました。オブジェクトの下で、「コンピューター」をチェックしました。次に、LOCATIONの下で、Webアプリケーションを実行しているマシン/サーバーを試しました。しかし、ユーザーの下に「MYPOOL」ユーザーを見つけることができませんでした。このリンクをたどろうとしましたが、完全ではありませんでした。どのユーザーを使用すればよいかわかりません。権限がないため、System.IO例外が引き続き発生します。使用するユーザーがわかったら、「ExportPath」ディレクトリに「Modify」権限を付与する必要があります。
これは私にとってはうまくいきませんでした:http://grekai.wordpress.com/2011/05/23/permissions-for-shared -folder-for-iis-7-application-pool-identity-across-domain /
簡単なテストのために、FilePermissionsTest.aspxというダミーページを作成し、ファイルを書き込むためのコードをいくつか入れてディレクトリを作成し、コードビハインドのPage_Loadイベントにファイルを書き込みました。しかし、ファイルが書き込まれないため、テストするのに十分な距離がありません。
.。
<div>
Check to see if the file "_File_Permissions_Test.txt" was written to <% Response.Write(Data.ConfigurationHelper.ValueFromConfiguration("ExportPath", Nothing))%>
</div>
.。
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Dim exportPath As String = Data.ConfigurationHelper.ValueFromConfiguration("ExportPath", Nothing)
If exportPath = String.Empty Then Return
Dim exportDirectory As DirectoryInfo = Directory.CreateDirectory(exportPath)
Dim writer As StreamWriter = File.CreateText(Path.Combine(exportDirectory.FullName, "_File_Permissions_Test.txt"))
writer.WriteLine("TESTING... " + DateTime.Now().ToString)
writer.Flush()
writer.Close()
End Sub
指定されたIDを使用してアプリケーションプールを実行している場合、マシンアカウントへのアクセス許可の付与は機能しません。ドメインアカウントを使用してAppPoolを実行し、そのアカウントに共有フォルダーへの適切なアクセス許可を付与する必要があります。共有フォルダーがリモートコンピューター上にある場合も、ローカルアカウントの使用は機能しません。
ドメインがない場合は、LocalSystemでAppPoolを実行できます。これは、共有フォルダーへのマシンアカウントのアクセス許可を付与することで機能するはずです。しかし、それはおそらくセキュリティの観点からは最適ではないでしょう。
ApplicationPoolIdentityではなく、コンピューター名を入力する必要があります。それがあなたの問題でした。試してみてください!動作するはずです。