无法使用FtpWebRequest从Azure应用程序连接到ftp服务器

4
我可以使用本地asp.net应用程序将文件上传到Azure FTP服务器,但在将应用程序发布到Azure后,它无法正常工作,显示未登录。
以下是连接到FTP服务器的代码,但部署到Azure后它不起作用。
private void ExecuteRequest(string url, string action, string fileToUpload = null)
    {
        var request = (FtpWebRequest)WebRequest.Create(url);
        request.Method = action;
        request.UseBinary = true;
        request.UsePassive = true;
        request.KeepAlive = true;
        request.Credentials = new NetworkCredential(_settings.Username, _settings.Password);
        WebResponse response = null;
        try
        {
            if (action == WebRequestMethods.Ftp.UploadFile)
            {
                StreamReader sourceStream = new StreamReader(fileToUpload);
                byte[] fileContents = Encoding.UTF8.GetBytes(sourceStream.ReadToEnd());
                sourceStream.Close();
                request.ContentLength = fileContents.Length;

                Stream requestStream = request.GetRequestStream();
                requestStream.Write(fileContents, 0, fileContents.Length);
                requestStream.Close();
            }
            response = request.GetResponse();
        }
        catch (WebException exp)
        {
            var ftpResponse = (FtpWebResponse)exp.Response;
            if (request.Method== WebRequestMethods.Ftp.MakeDirectory && ftpResponse.StatusCode != FtpStatusCode.ActionNotTakenFileUnavailable)
                DiosException.Throw(exp);
        }
        finally
        {
            if (response != null)
                response.Close();
        }
    }
1个回答

2
它应该可以在 Azure WebApp 上运行,我在我的本地测试了您的代码,它能正确运行。以下是我的测试代码。对于您的情况,您可以 远程调试 WebApp 以获取详细的错误信息。如果我们想要了解有关 Azure WebApp 的更多信息,我们可以参考 WebApp Sanbox
  var fileName = Guid.NewGuid().ToString() + ".txt";
  var url = $"ftp://xxxxx.ftp.azurewebsites.windows.net/site/wwwroot/{fileName}";
  var action = WebRequestMethods.Ftp.UploadFile;
  var request = (FtpWebRequest)WebRequest.Create(url);
  var fileToUpload = @"D:\home\site\wwwroot\tom.txt"; // make sure the file is existing and file can be accessed
  var userName = @"xxxxxx";
  var password = "xxxxxxx";
  request.Method = action;
  request.UseBinary = true;
  request.UsePassive = true;
  request.KeepAlive = true;
  request.Credentials = new NetworkCredential(userName, password);
  WebResponse response = null;
  try
  {
      if (action == WebRequestMethods.Ftp.UploadFile)
       {
          var sourceStream = new StreamReader(fileToUpload);
          byte[] fileContents = Encoding.UTF8.GetBytes(sourceStream.ReadToEnd());
          sourceStream.Close();
          request.ContentLength = fileContents.Length;
          var requestStream = request.GetRequestStream();
          requestStream.Write(fileContents, 0, fileContents.Length);
          requestStream.Close();
        }
          response = request.GetResponse();
    }
    catch (WebException exp)
    {
          var ftpResponse = (FtpWebResponse)exp.Response;
          //if (request.Method == WebRequestMethods.Ftp.MakeDirectory && ftpResponse.StatusCode != FtpStatusCode.ActionNotTakenFileUnavailable)
          // DiosException.Throw(exp);
    }
    finally
    {
          response?.Close();
    }

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接