«Удаленный сервер возвратил ошибку: (501) Синтаксическая ошибка в параметрах или аргументах.» при загрузке на FTP из Windows Azure - PullRequest
3 голосов
/ 20 февраля 2012

Мне нужно постоянно загружать сгенерированный файл из Azure на FTP-клиент, но когда я запускаю приведенный ниже код, он дает мне ...

Удаленный сервер возвратил ошибку: (501) Синтаксическая ошибкав параметрах или аргументах.

... также в эмуляторе Azure все работает нормально.

Это доказательство черновика кода для концептуальных целей, поэтому я не использовал преднамеренно рабочую роль, очередь, большой двоичный объект и т. Д. ...

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
        }
    }
}

1 Ответ

4 голосов
/ 20 февраля 2012

Если для UsePassive установлено значение false, необходимо убедиться, что порт для командного канала открыт (т. Е. Вам необходимо определить конечные точки и правила доступа).Если нет веской причины не использовать пассив, вам гораздо лучше использовать пассив.

Эрик

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...