.net c#を使用するWebサービスがあり、サーバー上のテキストファイルに書き込みたいのですが、これを機能させることができません。許可の問題だと思います。
具体的には、使用していることが問題だと思いますSystem.IO.Directory.GetCurrentDirectory()
。
より良い代替案はありますか?
.net c#を使用するWebサービスがあり、サーバー上のテキストファイルに書き込みたいのですが、これを機能させることができません。許可の問題だと思います。
具体的には、使用していることが問題だと思いますSystem.IO.Directory.GetCurrentDirectory()
。
より良い代替案はありますか?
ASP.NETユーザー(またはIISが実行されているアカウント)に、書き込もうとしているフォルダーへの書き込み権限を付与してみてください。
これがネットワーク共有の場合は、共有に書き込むことができるドメインユーザーとしてIISを実行してみてください。
最小限の権限を付与するという原則を忘れないでください(管理者レベルのアクセスは使用しないでください)。
宛先フォルダーを指定しない場合、Webサービスが「C:\ Windows \System32\」またはそのようなものに書き込みたいと思います。そのため、サーバーでUnauthorizedAccessExceptionがスローされます。Webサービスの「ホーム」ディレクトリに書き込むには、それが最初にどこにあるかを見つける必要があります。
以下は私にとってはうまくいきますが、他の提案もここにあります。
参照System.Webを追加し、次を呼び出して現在のディレクトリを取得します。
strFileDestination = System.Web.Hosting.HostingEnvironment.ApplicationPhysicalPath + strFileName;
IISでサービスに書き込み権限を与えることを忘れないでください。
Windows 2003 で実行していて、ASP.NET の偽装を有効にしておらず、DefaultAppPool または "Network Service" の ID で実行するように構成されているアプリケーション プールでアプリを実行している場合は、. 「Network Service」アカウントに宛先フォルダーへの書き込み権限を付与します。"ネットワーク サービス" 以外の ID を使用しているアプリ プールでサイトを実行している場合、そのアカウントには宛先フォルダーへの書き込みアクセス許可が必要になる場合があります。
Windows 2000 を実行している場合、'<MACHINENAME>\ASPNET'
アカウントには宛先フォルダーへの書き込み権限が必要です。
偽装をオンにしている場合は、代わりに、サイトの匿名ユーザー アカウントに宛先フォルダーへの書き込みアクセス許可を与える必要があります。
偽装がオンになっているかどうかを確認するには、(ASP.NET 2.0 を想定して) を開き、machine.config ファイル (C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\CONFIG) をチェックして、次の設定があるかどうかを確認します。
<identity impersonate="true"/>
これは、アプリケーションの web.config でオーバーライドされる場合もあります。
さらに、部分信頼環境で実行している場合、デフォルトの FileIOPermission は通常 $AppDir$ に設定されているため、Web サイトのアプリケーション フォルダーにしか書き込みできない可能性があります。正しい NTFS アクセス許可。
ネットワーク共有に書き込んでいる場合は、 StingyJackが答えを提供しますが、部分的な信頼環境に関する考慮事項は引き続き適用されます。
ただし、最初に NTFS 権限を確認してください。これがおそらく最善の策です。
これがケブに役立つことを願っています
Stuart さん、System.IO.Directory.GetCurrentDirectory() を使用する代わりに、Server.MapPath を使用することをお勧めします。ファイルを保存する Web サービスの場所に関連するディレクトリを Server.MapPath に指定できます。それ以外の場合は、おそらく完全なファイル パス "C:\Files\file.txt" を渡す必要があります。アクセス許可の問題に関しては、IIS_WPG および ASPNET ユーザー用にファイルを書き込んでいるフォルダーに書き込みアクセスを追加することで、通常これを解決できます (これらのユーザー名はサーバーによって異なる場合があります)。
Webサービスからファイルを書き込めるはずです。これは、アクセス許可または信頼の問題である可能性があります。限定的な信頼(つまり、中程度の信頼)にある場合は、Webルート内またはその下のパッチに書き込んでいることを確認してください。すでにそれを行っている場合、または完全信頼環境にある場合は、ディレクトリにIISワーカープロセスが書き込むためのアクセス許可があることを確認してください。