【问题标题】:C# Windows service times out at FtpWebRequest.GetResponse() in release modeC# Windows 服务在发布模式下在 FtpWebRequest.GetResponse() 处超时
【发布时间】:2016-11-03 01:55:37
【问题描述】:

我创建了一个简单的 Windows 服务,它每 20 秒检查一次 FTP 文件夹并将所有文件复制到本地计算机。

在调试模式下它工作得很好,但是当我使用 installutil 安装版本时,我在调用时遇到以下错误

 using (response = reqFTP.GetResponse())

FTP 错误...System.Net.WebException:操作已超时 System.Net.FtpWebRequest.SyncRequestCallback(Object obj) 在 System.Net.FtpWebRequest.RequestCallback(Object obj) 在 System.Net.CommandStream.Dispose(布尔处理)在 System.IO.Stream.Close() 在 System.IO.Stream.Dispose() 在 System.Net.ConnectionPool.Destroy(PooledStream pooledStream) 在 System.Net.ConnectionPool.PutConnection(PooledStream pooledStream, Object owningObject, Int32 creationTimeout, Boolean canReuse) at System.Net.FtpWebRequest.FinishRequestStage(RequestStage 阶段)在 System.Net.FtpWebRequest.GetResponse() 在 FileMan.Service1.GetFileList() 在....

完整的请求如下;

 string[] downloadFiles;
            StringBuilder result = new StringBuilder();
            WebResponse response = null;
            StreamReader reader = null;
            textWrite.WriteLine("attempting to get file list" + DateTime.Now + Environment.NewLine, true);
            try
            {
                FtpWebRequest reqFTP;
                ServicePointManager.DefaultConnectionLimit = 100;
                reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(downloadSrc));
                reqFTP.UseBinary = true;
                textWrite.WriteLine("requestFTP...Passed..." + DateTime.Now + Environment.NewLine, true);
                //reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
                reqFTP.Method = WebRequestMethods.Ftp.ListDirectory;
                reqFTP.Proxy = null;
                reqFTP.KeepAlive = true;
                reqFTP.UsePassive = false;
                reqFTP.Timeout = 8000;

                //////////STOPS HERE
                //response = reqFTP.GetResponse();
                using (response = reqFTP.GetResponse())
                {
                    // Do stuff
                    //...

                    reader = new StreamReader(response.GetResponseStream());
                    string line = reader.ReadLine();

                    while (line != null)
                    {
                        result.Append(line);
                        result.Append("\n");
                        line = reader.ReadLine();
                    }
                    result.Remove(result.ToString().LastIndexOf('\n'), 1);
                    return result.ToString().Split('\n');
                }
            }
            catch (Exception ex)
            {
                textWrite.WriteLine("FTP error..." + ex + "..." + DateTime.Now + Environment.NewLine, true);
                textWrite.Close();
                if (reader != null)
                {
                    reader.Close();
                }
                if (response != null)
                {
                    response.Close();
                }
                downloadFiles = null;
                return downloadFiles;
            }

我需要添加任何权限吗? 由于这在调试模式下工作,因此代码本身很好。我只需要弄清楚是什么阻碍了它

附: 我使用 LocalSystem 作为帐户,并在使用 installutil 安装之前将发布版本直接复制到 c 驱动器。

【问题讨论】:

  • 您的机器连接到 FTP 服务器了吗?有防火墙阻止它吗?
  • 在调试模式下连接它没有问题(通过 vs 2015 运行)但在发布模式下超时编辑:刚刚尝试关闭防火墙(运气不好)
  • edrgkjl;rajklsafkjlsfkdaj 刚刚关闭了网络防火墙,它工作了...........我会在防火墙中添加一个例外并回答这个问题让它稳定
  • 那个答案对我没有帮助

标签: c# .net ftp timeout


【解决方案1】:

通过关闭公共防火墙,程序正常工作! 我刚刚将服务 exe 添加到入站防火墙规则中,并且它有效希望这可以帮助遇到类似问题的其他人

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多