C# 基础连接已关闭:接收时发生意外错误

C# 基础连接已关闭:接收时发生意外错误,c#,windows-server-2008,windows-server-2003,webclient,C#,Windows Server 2008,Windows Server 2003,Webclient,当我在我的win2k8机器上尝试我的程序时,它运行正常,但在Win2K3上,它给我这个错误,那个错误消息 下面是生成错误的代码 WebClient wc = new WebClient(); wc.DownloadFile("ftp://ftp.website.com/sample.zip"); 这就是奇怪的部分。如果我完全禁用服务器上的防火墙。错误消失了。但如果我将程序添加到异常列表并打开防火墙,它仍然会出错 在web上搜索了几天,找不到任何解决方案。您应该尝试使用被动模式进行FTP。We

当我在我的win2k8机器上尝试我的程序时,它运行正常,但在Win2K3上,它给我这个错误,那个错误消息

下面是生成错误的代码

WebClient wc = new WebClient(); 
wc.DownloadFile("ftp://ftp.website.com/sample.zip");
这就是奇怪的部分。如果我完全禁用服务器上的防火墙。错误消失了。但如果我将程序添加到异常列表并打开防火墙,它仍然会出错


在web上搜索了几天,找不到任何解决方案。

您应该尝试使用被动模式进行FTP。WebClient类不允许这样做,但FtpWebRequest允许这样做

FtpWebRequest request = WebRequest.Create("ftp://ftp.website.com/sample.zip") as FtpWebRequest;
request.UsePassive = true;
FtpWebResponse response = request.GetResponse() as FtpWebResponse;
Stream ftpStream = response.GetResponse();
int bufferSize = 8192;
byte[] buffer = new byte[bufferSize];
using (FileStream fileStream = new FileStream("localfile.zip", FileMode.Create, FileAccess.Write))
{
    int nBytes;
    while((nBytes = ftpStream.Read(buffer, 0, bufferSize) > 0)
    {
        fileStream.Write(buffer, 0, nBytes);
    }
}

请发布完整的异常,包括任何内部异常:

try
{
    WebClient wc = new WebClient(); 
    wc.DownloadFile("ftp://ftp.website.com/sample.zip");
}
catch (Exception ex)
{
    Console.WriteLine(ex.ToString()); // Or Debug.Trace, or whatever
    throw;    // As if the catch were not present
}
我有一个类似的问题(没有ftp)和一个不同的解决方案

生产服务器环境已变得非常安全,服务器无法访问URL

快速测试是在框上使用浏览器,看看是否可以导航到url


希望这对某人有所帮助。

如何使用FtpWebRequest下载文件并将其保存到本地驱动器?我发现的示例只显示了如何显示服务器响应。这是一个错误,我的意思是N字节。。。现在已修复。请参见.NET 4.0中的Stream.CopyTo()。即使在被动模式下使用FtpWebRequest,我也会遇到此错误。这为我修复了此错误。我已经在使用FtpWebRequest,而不是WebClient,但是我在Stream.CopyTo()操作的最后遇到了异常,当时我下载的文件实际上是完整的。这个被动模式修复程序并不是为了吞下异常而编码,而是完全消除了异常。无论如何,为了堆栈跟踪,发布整个过程。