質問者
ネットワーク越しにファイルを出力する方法

質問
-
お世話になります。
ASP.NETで、ボタン押下によりネットワーク上の別のサーバにファイルを出力したいと思いますが、
次のコードを実行すると、
「ログオン失敗: ユーザー名を認識できないか、またはパスワードが間違っています。」
のエラーとなってしまいます。String path1 = "\\\\ServerName\\folder\\filename.txt";
String body1 = "abcdefg,シフトJIS\r\n";
System.Text.Encoding shiftjis = System.Text.Encoding.GetEncoding(932);
System.IO.File.AppendAllText(path1, body1, shiftjis);そこで、ユーザ名とパスワードを記載した次のWeb.configファイルを
ソースコードと同じフォルダに置いてみたのですが、
アプリケーションエラーが発生してしまいます。<configuration>
<appSettings/>
<connectionStrings/>
<system.web>
<identity impersonate="true" userName="domain1\username1" password="password1"/>
</system.web>
</configuration>ネットワーク越しにファイルを出力したいだけなのですが、
どのようにすれば、出力できるのかを教えていただけないでしょうか。なお、Web.configファイルを削除して、Visual Web Developerを起動し、
開発環境から実行すると、正常にファイルが出力されます。また、マイネットワークから \\\\ServerName\\folder に
ファイルを書き込むことも正常にできます。以上、よろしくお願いします。
すべての返信
-
委任が必要になるんじゃないかと思います。
ASP.NETのThreadからネットワークリソースへの書き込み方法
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=2465&forum=7 -
とりあえず検証・動作を確認した~い! と云うのであれば、次の過去ログは参考になりませんか?
■ファイルサーバ(共有フォルダ)のファイルを読み書きしたーい!
http://www.microsoft.com/japan/msdn/community/gdn/ShowPost-34911.htm
-
みなさん、ご回答ありがとうございます。
本番環境におけるユーザのWindowsログオン名
String logonName1 = System.Security.Pricipal.WindowsIdentity.GetCurrent().Name
を調べたところ、
NT AUTHORITY\NETWORK SERVICE
と表示されましたので、これを正常にファイル出力できる、開発環境のログオン名に変更(すなわち偽装)すればよいと
いうことになると思います。WindowsImpersonationContextクラスのサンプルプログラム
http://msdn2.microsoft.com/ja-jp/library/system.security.principal.windowsimpersonationcontext(VS.80).aspx
を参考に、LogonUserメソッドを呼び出し、ユーザ名を変更してみましたが、
開発環境においては、LogonUserがfalseを返してきますし、
本番環境では、アプリケーションエラーが発生します。もう少し調べてみようと思いますが、どなたか
アドバイスいただけましたら幸いです。なお、.NET Framework は2.0を使用し、
認証の種類 WindowsIdentity.AuthenticationType は Kerberos、
偽装レベル WindowsIdentity.ImpersonationLevel は None
となっています。
よろしくお願いします。