11

現在、Web アプリケーションからアップロードされたファイルを受け取るアプリケーションがあります。そのファイルを、たまたま同じネットワーク上にあるファイル サーバーに転送する必要があります (ただし、常にそうであるとは限りません)。

C# .NET で webclient クラスを使用しようとしていました。

    string filePath = "C:\\test\\564.flv";
    try
    {
        WebClient client = new WebClient();

        NetworkCredential nc = new NetworkCredential(uName, password);

        Uri addy = new Uri("\\\\192.168.1.28\\Files\\test.flv");
        client.Credentials = nc;
        byte[] arrReturn = client.UploadFile(addy, filePath);
        Console.WriteLine(arrReturn.ToString());
    }
    catch (Exception ex)
    {
        Console.WriteLine(ex.Message);
    }

192.168.1.28 にあるマシンはファイル サーバーであり、共有 c:\Files があります。現在、ログインに失敗したユーザー名またはパスワードが正しくないというエラーが表示されますが、エクスプローラーを開いてそのパスのログインを正常に入力できます。リモート デスクトップを使用してログインすることもできるので、ユーザー アカウントが機能していることがわかります。

このエラーに関するアイデアはありますか? そのようなファイルを直接転送することは可能ですか? webclient クラスまたは他のクラスでしょうか?

4

3 に答える 3

17

使うだけ

File.Copy(filepath, "\\\\192.168.1.28\\Files");

UNC パスを介して公開された Windows ファイル共有は、ファイル システムの一部として扱われ、Web とは何の関係もありません。

使用される資格情報は、ASP.NET ワーカー プロセスの資格情報、または有効にした偽装です。それらを調整して正しくすることができれば、これを行うことができます。

サーバー名の代わりに IP アドレスを使用しているため、問題が発生する可能性があります (Windows の信頼設定により、ドメインからの離脱が防止されます。IP を使用すると、ドメインの詳細が隠されます)。 可能であれば、サーバー名を使用してください。

これが同じ Windows ドメイン上になく、別のドメイン アカウントを使用しようとしている場合は、ユーザー名を "[domain_or_machine]\[username]" として指定する必要があります。

明示的な資格情報を指定する必要がある場合は、偽装ソリューションのコーディングを検討する必要があります。

于 2008-11-04T21:34:28.723 に答える
4
namespace FileUpload
{
public partial class Form1 : Form
{
    string fileName = "";
    public Form1()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {

        string path = "";
        OpenFileDialog fDialog = new OpenFileDialog();
        fDialog.Title = "Attach customer proposal document";
        fDialog.Filter = "Doc Files|*.doc|Docx File|*.docx|PDF doc|*.pdf";
        fDialog.InitialDirectory = @"C:\";
        if (fDialog.ShowDialog() == DialogResult.OK)
        {
            fileName = System.IO.Path.GetFileName(fDialog.FileName);
            path = Path.GetDirectoryName(fDialog.FileName);
            textBox1.Text = path + "\\" + fileName;

        }
    }

    private void button2_Click(object sender, EventArgs e)
    {
        try
        {
            WebClient client = new WebClient();

            NetworkCredential nc = new NetworkCredential("erandika1986", "123");

            Uri addy = new Uri(@"\\192.168.2.4\UploadDocs\"+fileName);

            client.Credentials = nc;
            byte[] arrReturn = client.UploadFile(addy, textBox1.Text);
            MessageBox.Show(arrReturn.ToString());

        }
        catch (Exception ex1)
        {
            MessageBox.Show(ex1.Message);
        }
    }
}
}
于 2010-05-30T10:26:24.327 に答える
1

(RUN コマンドまたはネットワーク ドライブのマッピングを介して) IP アドレスを手動で開くと、PC はパイプ経由で資格情報を送信し、ファイル サーバーは DC から承認を受け取ります。

ASP.Net が試行するとき、IIS ワーカー ユーザーを使用しようとします (偽装がオンになっていない限り、他のいくつかの問題がリストされます)。従来、IIS ワーカー ユーザーは、複数のサーバー (または Web サーバー上の他のフォルダー) で作業する権限を持っていません。

于 2008-11-04T21:35:45.037 に答える