2012-07-11 36 views
12

Tôi muốn tải xuống tệp từ máy chủ FTP. Tôi đã viết mã sau để tải tập tin từ ftp"Kết nối cơ bản đã bị đóng" khi tải xuống tệp từ máy chủ ftp

public void downloadFile(string FTPAddress, string filename, string username, string password, string destFile) 
{ 
    try 
    { 
     FtpWebRequest request = FtpWebRequest.Create(FTPAddress + filename) as FtpWebRequest; 
     request.Method = WebRequestMethods.Ftp.DownloadFile; 
     request.Credentials = new NetworkCredential(username, password); 
     request.UsePassive = true; 
     request.UseBinary = true; 
     request.UseBinary = true; 
     request.KeepAlive = false; //close the connection when done 
     request.Timeout = 60000; 
     //Streams 
     using (var response = request.GetResponse()) 
     { 

      using (Stream reader = response.GetResponseStream()) 
      { 
       byte[] buffer = new byte[1024]; 
       using (Stream streamFile = File.Create(destFile)) 
       { 
        while (true) 
        { 
         int bytesRead = reader.Read(buffer, 0, buffer.Length); 
         if (bytesRead == 0) 
         { 
          break; 
         } 
         else 
         { 
          streamFile.Write(buffer, 0, bytesRead); 

         } 
        } 
       } 
      } 
     } 
    } 
    catch(Exception e) 
    { 
     Console.WriteLine(e.Message);    
    } 
}  

Nhưng khi chạy mã này đem lại cho tôi ngoại lệ:

Kết nối tiềm ẩn đã được đóng cửa: Một lỗi không mong muốn xảy ra vào một nhận.

gì có thể vấn đề giúp tôi ...

+1

Khi bất động sản KeepAlive được thiết lập là false, kết nối điều khiển được đóng cửa khi bạn gọi phương thức Close. Bạn nhận được ngoại lệ này trên dòng nào? Bạn có cố gắng sử dụng giá trị mặc định của thuộc tính Thời gian chờ (Vô cực) không? – Ofiris

+0

Có thể đó là sự cố tường lửa. Bạn đã thử sử dụng hoạt động thay vì chế độ thụ động chưa? – Arjen

+0

Đây là sự cố với máy chủ hoặc sự cố tcp/ip cục bộ của bạn (tường lửa, chống vi-rút, v.v.). Mã hoạt động tốt, ví dụ như điều này tạo ra một tệp ccrisconv.txt trên đĩa của tôi: 'downloadFile (" ftp://ftp.nlm.nih.gov/ "," nlmdata/sample/ccris/ccrisconv.txt ", null , null, "ccrisconv.txt"); ' –

Trả lời

2

Đề xuất 1: Đặt rõ ràng thời gian chờ của bạn để vô hạn.

request.Timeout = -1; 

Đề xuất 2: Nắm bắt loại ngoại lệ cụ thể hơn WebException và kiểm tra WebExceptionStatus.

Đề xuất 3: Bật truy tìm cho System.Net.

Tôi đã đặt TraceLevel cho hai trong số các nguồn không áp dụng được trong trường hợp của bạn.

How to: Configure Network Tracing

<configuration> 
    <system.diagnostics> 
    <sources> 
     <source name="System.Net" tracemode="includehex" maxdatasize="1024"> 
     <listeners> 
      <add name="System.Net"/> 
     </listeners> 
     </source> 
     <source name="System.Net.Cache"> 
     <listeners> 
      <add name="System.Net"/> 
     </listeners> 
     </source> 
     <source name="System.Net.Http"> 
     <listeners> 
      <add name="System.Net "/> 
     </listeners> 
     </source> 
     <source name="System.Net.Sockets"> 
     <listeners> 
      <add name="System.Net"/> 
     </listeners> 
     </source> 
     <source name="System.Net.WebSockets"> 
     <listeners> 
      <add name="System.Net"/> 
     </listeners> 
     </source> 
    </sources> 
    <switches> 
     <add name="System.Net" value="Verbose"/> 
     <add name="System.Net.Cache" value="Off"/> 
     <add name="System.Net.Http" value="Off"/> 
     <add name="System.Net.Sockets" value="Verbose"/> 
     <add name="System.Net.WebSockets" value="Off"/> 
    </switches> 
    <sharedListeners> 
     <add name="System.Net" 
     type="System.Diagnostics.TextWriterTraceListener" 
     initializeData="network.log" 
     /> 
    </sharedListeners> 
    <trace autoflush="true"/> 
    </system.diagnostics> 
</configuration> 
Các vấn đề liên quan