0

我的 C# FTP 上传脚本和新文件服务器出现问题。我用于上传的脚本在我的旧文件服务器上运行良好,但抛出:

System.Net.WebException: Cannot open passive data connection

当我尝试上传数据时。

    public static bool uploadFile(string aSourceUrl, string aUserName, string aPassword, string aSourceFileName, string aTargetFtpUrl, string aFilename, bool aPassiveMode = true)
    {
        string aFileurl = aSourceUrl + "/" + aSourceFileName;
        string aTargetUrl = aTargetFtpUrl + "/" + aFilename;
        Debug.Log("creating ftp upload. Source: " + aFileurl + " Target: " + aTargetUrl);
        System.IO.FileStream aFileStream = null;
        System.IO.Stream aRequestStream = null;

        try
        {
            var aFtpClient = (FtpWebRequest) FtpWebRequest.Create(aTargetUrl);
            aFtpClient.Credentials = new NetworkCredential(aUserName, aPassword);
            aFtpClient.Method = WebRequestMethods.Ftp.UploadFile;
            aFtpClient.UseBinary = true;
            aFtpClient.KeepAlive = true;
            aFtpClient.UsePassive = aPassiveMode;

            var aFileInfo = new System.IO.FileInfo(aFileurl);
            aFtpClient.ContentLength = aFileInfo.Length;
            byte[] aBuffer = new byte[4097];
            int aBytes = 0;
            int aTotal_bytes = (int) aFileInfo.Length;
            aFileStream = aFileInfo.OpenRead();
            aRequestStream = aFtpClient.GetRequestStream();
            while (aTotal_bytes > 0)
            {
                aBytes = aFileStream.Read(aBuffer, 0, aBuffer.Length);
                aRequestStream.Write(aBuffer, 0, aBytes);
                aTotal_bytes = aTotal_bytes - aBytes;
            }
            aFileStream.Close();
            aRequestStream.Close();
            var uploadResponse = (FtpWebResponse) aFtpClient.GetResponse();
            Debug.Log(uploadResponse.StatusDescription);
            uploadResponse.Close();
            return true;
        }
        catch (Exception e)
        {
            if (aFileStream != null) aFileStream.Close();
            if (aRequestStream != null) aRequestStream.Close();

            Debug.LogError(e.ToString());
            return false;
        }
   }

切换到活动模式时,我也遇到了一个异常:

System.IO.IOException: Not connected

奇怪的是:如果我通过 ftp 客户端上传数据,它可以在两台服务器上运行,所以我的猜测是我的脚本中的某些内容可能丢失了。

有没有人暗示我可能是什么问题?正如我所提到的,该脚本在我的旧服务器上运行良好,我和我的服务器管理员认为两台服务器的设置相似。

谢谢!

4

2 回答 2

0

被动 ftp 不仅使用端口 20 和 21.... 被动允许更多连接,但使用 +1024 端口。它需要在防火墙中被允许,这通常是它失败的原因。

于 2016-03-01T15:04:29.433 回答
0

好吧,经过几次不同的尝试和调试会话,我们发现脚本在被动模式下工作正常。服务器被配置为使用只允许活动模式。

似乎 FtpWebRequest 不允许设置端口并切换到客户端无法在活动模式下使用的端口,因此在尝试打开服务器不支持的端口(需要端口 21)时失败。

解决方案似乎是找到 FtpWebRequest 的替代方案,它允许指定活动模式使用的端口。

于 2016-03-11T17:00:12.157 回答