【发布时间】: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 刚刚关闭了网络防火墙,它工作了...........我会在防火墙中添加一个例外并回答这个问题让它稳定
-
那个答案对我没有帮助