[英]“The remote server returned an error: (501) Syntax error in parameters or arguments.” when uploading TO FTP FROM Windows Azure
I need to continuously upload a generated file from Azure to client's FTP but when I run the code below it gives me ... 我需要不断将生成的文件从Azure上传到客户端的FTP,但是当我运行下面的代码时它会给我...
The remote server returned an error: (501) Syntax error in parameters or arguments. 远程服务器返回错误:(501)参数或参数中的语法错误。
...also in Azure emulator it works fine. ...也在Azure模拟器中它工作正常。
This is a proof of concept purposes draft code, so I did not use Worker role, queue or blob etc. intentionally... 这是概念验证目的草案代码,所以我没有故意使用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
}
}
}
If you set UsePassive to false, then you need to make sure that the port for the command channel is open (ie, you need to define endpoints and access rules). 如果将UsePassive设置为false,则需要确保命令通道的端口已打开(即,您需要定义端点和访问规则)。 Unless there is a good reason to not use passive, you are far better off using passive. 除非有充分的理由不使用被动,否则你最好不要使用被动。
Erick 埃里克
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.