2015-11-20 142 views
0

我有一個非常令人沮喪的情況。我需要使用FTP從一些特殊的硬件中檢索列表,刪除和上傳文件。我的所有開發都發生在插入神祕盒子的遠程計算機上。據我的理解,該框在嵌入式軟件上運行。我可以通過FTP訪問該文件夾的唯一方法是使用cmd並調用ftp.exe,傳遞ip並按回車,輸入,這意味着沒有憑據。然後我可以做ls。放入並刪除。不過,我需要做一個DLL,將在以後從一個HTA/JavaScript的圖形用戶界面調用,它會像這樣使用:FTP錯誤:202未執行命令

var ftp = new ActiveXObject("Mission.FTP")

var list = ftp.ls(hostIP); 

但任何事情我試着從C#做返回以下錯誤:

遠程服務器返回錯誤:202命令未實現。

該失敗

C#代碼是:

FtpWebRequest request = CreateRequest(url, WebRequestMethods.Ftp.ListDirectory); 
     using (FtpWebResponse response = (FtpWebResponse)request.GetResponse()) 

它正好在的GetResponse()方法將失敗。

不是FTP的標準協議。爲什麼ftp.exe與C#的FTP方式有不同的結果?

+0

啓用[網絡跟蹤](http://stackoverflow.com/q/9664650/ 850848)並向我們顯示日誌。 –

+0

謝謝馬丁,那是grat informantion。無法等待嘗試。我相信這些信息在未來的項目中也會派上用場。 –

回答

1

啓用上面建議的網絡跟蹤我能夠找到問題的確切原因。

通過查看日誌:

System.Net Information: 0 : [9188] FtpControlStream#42866877 - Sending command [PASV] 
System.Net.Sockets Verbose: 0 : [9188] Data from Socket#52434070::Send 
System.Net.Sockets Verbose: 0 : [9188] 00000000 : 50 41 53 56 0D 0A        : PASV.. 
System.Net.Sockets Verbose: 0 : [9188] Exiting Socket#52434070::Send() -> Int32#6 
System.Net.Sockets Verbose: 0 : [9188] Socket#52434070::Receive() 
System.Net.Sockets Verbose: 0 : [9188] Data from Socket#52434070::Receive 
System.Net.Sockets Verbose: 0 : [9188] 00000000 : 32 30 32 20 43 6F 6D 6D-61 6E 64 20 6E 6F 74 20 : 202 Command not 
System.Net.Sockets Verbose: 0 : [9188] 00000010 : 69 6D 70 6C 65 6D 65 6E-74 65 64 2E 0D 0A  : implemented... 
System.Net.Sockets Verbose: 0 : [9188] Exiting Socket#52434070::Receive() -> Int32#30 
System.Net Information: 0 : [9188] FtpControlStream#42866877 - Received response [202 Command not implemented.] 
System.Net.Sockets Verbose: 0 : [9188] Socket#52434070::Dispose() 
System.Net Information: 0 : [9188] FtpWebRequest#7224250::(Releasing FTP connection#42866877.) 
System.Net Error: 0 : [9188] Exception in FtpWebRequest#7224250::GetResponse - The remote server returned an error: 202 Command not implemented. 

到問題的解決方法是一個簡單的:

request.UsePassive = false;