2016-03-22 1 views
0

私はいくつかの情報を.CSVファイルに収集し、そのファイルをftpサーバーに送信するプロジェクトに取り組んでいます。c#FTPアップロードはなぜ成功するのですか?

プログラムは時々ファイルを正常に送信し、それ以外の時間、それだけでエラーを停止し、スロー:

型「System.Net.WebException」の未処理の例外がSystem.dllの

で発生しました追加情報:リモートサーバーからエラーが返されました:227パッシブモードに入る(192,168,10,170,216,244)

誰かが間違っていたことを見つけられますか?

ありがとうございます。

は、ここに私のコードです

 private void sendFile_Click(object sender, EventArgs e) 
    { 
     Upload("ftp://100.64.44.12", "UsernameHere", "PasswordHere", @"C:\Users\Kasper\Documents\testFolder\data.csv"); 
    } 

    public void Upload(string FTPAddress, string username, string password, string filePath) 
    { 
     FileStream stream = File.OpenRead(filePath); 
     byte[] buffer = new byte[stream.Length]; 
     stream.Read(buffer, 0, buffer.Length); 
     stream.Close(); 

     FtpWebRequest request = (FtpWebRequest)FtpWebRequest.Create(FTPAddress + "/" + 
     Path.GetFileName(filePath)); 
     request.Method = WebRequestMethods.Ftp.UploadFile; 

     request.Credentials = new NetworkCredential(username, password); 
     request.UsePassive = true; 
     request.UseBinary = false; 
     request.KeepAlive = true; 

     StreamReader sourceStream = new StreamReader("testfile.txt"); 
     byte[] fileContents = Encoding.UTF8.GetBytes(sourceStream.ReadToEnd()); 
     sourceStream.Close(); 
     request.ContentLength = fileContents.Length; 

     Stream requestStream = request.GetRequestStream(); 
     requestStream.Write(fileContents, 0, fileContents.Length); 
     requestStream.Close(); 

     FtpWebResponse response = (FtpWebResponse)request.GetResponse(); 

     MessageBox.Show("Upload File Complete, status {0}", response.StatusDescription); 

     response.Close(); 
    } 
+0

が上のパッシブモードのままに設定してみてください。サーバーでパッシブ接続のみが許可されている場合、500サーバーエラーが発生します。 system.netのトレースを取得すると、エラーが発生した理由がわかります。通常はファイアウォールです。 – vendettamit

+0

[ロギングを有効にする](http://stackoverflow.com/q/9664650/850848)、成功したアップロードと失敗したログの両方のログファイルを表示します。 –

答えて

-1

FtpWebRequest.UsePassiveが= falseを

+0

ストリームrequestStream = request.GetRequestStream(); –

+0

この行にこのエラーが発生しましたSystem.dllで 'System.Net.WebException'の未処理例外が発生しました 追加情報:リモートサーバーからエラーが返されました:(500)構文エラー、コマンドが認識されません。 –

+0

@ KasperHansen 'System.net' [ここの手順](https://blogs.msdn.microsoft.com/dgorti/2005/09/18/using-system-net-tracing/)のトレースをオンにし、この例外が発生したときにトレース情報。 – vendettamit

関連する問題