2014-07-11 110 views
3

我需要編寫一個連接到FTP服務器的應用程序。該FTP服務器不允許被動模式連接。我可以使用Filezilla連接到FTP服務器。FTP 425無法打開IIS後面的數據連接

我開發了一個C#WCF服務,它使用FTPWebRequest類連接到這個FTP服務器。 下面是的FtpWebRequest對象的基本設置:

ftpreq.Proxy = null; 
ftpreq.KeepAlive = true; 
ftpreq.UsePassive = false; 

當我運行從Visual Studio(按Ctrl + F5),它連接到FTP服務器,並下載所需的文件WCF服務沒有任何問題

但當我在本地IIS 7.5託管服務,它不能與下面的錯誤連接到FTP服務器:

The remote server returned an error: (425) Can't open data connection.

對這個問題的一些google搜索後,我想周圍的防火牆設置播放,但它是不使用。不知道它是否與某些IIS安全問題或其他問題有關。

任何幫助將高度讚賞

回答

2

這是我的方式:

開始\控制面板\ Windows防火牆\允許的程序。

這裏!勾選您的應用程序中的複選框,以允許其通過Windows FireWall。 記住!勾選複選框「家庭/工作(私人)」以及複選框「公共」。

祝你好運!

-1

同樣的問題發生在我身上。所以我做了以下,並修復了它: - 我重新啓動了整個FTP服務器 - 重新啓動後,我啓動了Internet信息服務(IIS)6.0管理器。默認FTP站點已停止。我開始了。並修復它!

0

我評論此設置:

UseBinary, Proxy, KeepAlive, UsePassive

和現在工作好:

  FtpWebRequest reqFTP; 
      reqFTP = (FtpWebRequest)WebRequest.Create(new Uri(ftpLocation + remoteDir)); 
      //reqFTP.UseBinary = true; 
      reqFTP.Credentials = new NetworkCredential(ftpUser, ftpPassword); 
      reqFTP.Method = WebRequestMethods.Ftp.ListDirectory; 
      //reqFTP.Proxy = null; 
      //reqFTP.KeepAlive = false; 
      //reqFTP.UsePassive = false; 
      response = reqFTP.GetResponse(); 
      reader = new StreamReader(response.GetResponseStream()); 
      string line = reader.ReadLine(); 

此代碼是微軟論壇:https://social.msdn.microsoft.com/Forums/en-US/079fb811-3c55-4959-85c4-677e4b20bea3/downloading-all-files-in-directory-ftp-and-c?forum=ncl

+0

當然,將UsePassive設置爲true(或保持默認真值)會有所幫助。但OP是特別說*此FTP服務器不允許被動模式連接。* –

+0

感謝您的減號,但它的工作原理沒有錯誤代碼425. – wertyk

+0

但它沒有回答這個問題! –

1

這裏是複雜的解決方案

第1步 單個ftp(非ftps)使用兩個網絡通道(端口和端口範圍)。 一個(tcp:21)用於驗證,另一個用作數據的數據通道。

當在iis上配置ftp時,打開21端口進行認證和控制通道,然後在iis控制面板上的「FTP防火牆支持」中指定數據端口範圍(5000-6000)和網絡接口外部ip與ftp -服務器。

第2步 最後,在windows防火牆中打開tcp:21並創建custon規則,允許連接tcp:5000-6000。重新啓動系統(或重新啓動服務)。

這就是所有。

ps。請記住,ftp上的iis使用tcp:21作爲控制/ auth,tcp:5000-6000作爲數據。 tcp:5000-6000可能會在iis manager 1中發生變化,並會在windows firewall second中打開。

相關問題