“远程服务器返回错误:(501) 参数或参数中的语法错误。” 从 Windows Azure 上传到 FTP 时

cil*_*ler 4 ftp azure

我需要不断地将生成的文件从 Azure 上传到客户端的 FTP,但是当我运行下面的代码时,它给了我......

远程服务器返回错误:(501) 参数或参数中的语法错误。

...也在 Azure 模拟器中它工作正常。

这是一个概念证明目的的草案代码,所以我没有故意使用 Worker 角色、队列或 blob 等......

using System;
using System.IO;
using System.Net;
using System.Web;

namespace CloudWeb
{
    /// <summary>
    /// Summary description for Ftp
    /// </summary>
    public class Ftp : IHttpHandler
    {
        private const string FtpHost = "ftp://ftp.Host.com/App_Data/{0}";
        private const string FtpUserName = "UserName";
        private const string FtpPassword = "Password";
        private const string WarningImageFile = "images/status_warning.png";

        public void ProcessRequest(HttpContext context)
        {
            context.Response.ContentType = "text/plain";
            UploadFtp(context.Server.MapPath(WarningImageFile));
            context.Response.Write("Hello World");
        }

        public bool IsReusable
        {
            get
            {
                return false;
            }
        }

        private static void UploadFtp(string source)
        {
            // read local file
            byte[] bFile = File.ReadAllBytes(source);

            // set ftp values
            var myFtp = (FtpWebRequest)WebRequest.Create(String.Format(FtpHost, Path.GetFileName(source)));
            myFtp.Method = WebRequestMethods.Ftp.UploadFile;
            myFtp.UsePassive = false;
            myFtp.UseBinary = true;
            myFtp.KeepAlive = true;
            myFtp.Credentials = new NetworkCredential(FtpUserName, FtpPassword);

            // upload file
            using (Stream clsStream = myFtp.GetRequestStream())
            {
                clsStream.Write(bFile, 0, bFile.Length);
                clsStream.Close();
                //clsStream.Dispose();
            }

            // ReSharper disable RedundantAssignment
            myFtp = null;
            // ReSharper restore RedundantAssignment
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Eri*_*k T 5

如果将 UsePassive 设置为 false,则需要确保命令通道的端口是开放的(即,您需要定义端点和访问规则)。除非有充分的理由不使用被动,否则您最好使用被动。

埃里克

  • 谢谢你!许多旧的 FTP 服务器不支持被动,这就是我将其设置为 false 的原因。即使将其设置为 true 也可以解决问题,您是否可以向我提供有关如何将其设置为端口的文章链接? (2认同)