none
ネットワーク越しにファイルを出力する方法 RRS feed

  • 質問

  • お世話になります。

    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
    ファイルを書き込むことも正常にできます。

     

    以上、よろしくお願いします。

    2007年11月1日 13:39

すべての返信

  • 委任が必要になるんじゃないかと思います。

     

    ASP.NETのThreadからネットワークリソースへの書き込み方法
    http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=2465&forum=7

    2007年11月1日 15:30
    モデレータ
  • > なお、Web.configファイルを削除して、Visual Web Developerを起動し、
    > 開発環境から実行すると、正常にファイルが出力されます。

     

    開発用のWebサーバはログイン中のユーザの権限で実行されています。
    そのユーザに指定した先にファイルに書き込む権限があるので正常に動作するのでしょう。

    開発用サーバと本番環境(IIS)では実行時のユーザが異なることに注意してください。

    2007年11月1日 22:38
  • とりあえず検証・動作を確認した~い! と云うのであれば、次の過去ログは参考になりませんか?

     

    ■ファイルサーバ(共有フォルダ)のファイルを読み書きしたーい!

    http://www.microsoft.com/japan/msdn/community/gdn/ShowPost-34911.htm

    2007年11月2日 7:25
  • みなさん、ご回答ありがとうございます。

    本番環境におけるユーザの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
    となっています。


     

    よろしくお願いします。

     

    2007年11月5日 4:46
  • うーん。。。

    ユーザ名を変更することが「偽装」ではないです。

    偽装についてもうちょっときちんと調べてみることをおすすめします。

    2007年11月5日 12:38