2013-07-10 23 views
8

Tôi muốn tạo hàm C# để kiểm tra kết nối với Máy chủ FTP.Đóng/hủy một FtpWebRequest

Đây là chức năng của tôi:

 FtpWebRequest requestDir = (FtpWebRequest)FtpWebRequest.Create("ftp://" + strHost.Trim()); 
     requestDir.Credentials = new NetworkCredential(strUser, strPass); 
     requestDir.Method = WebRequestMethods.Ftp.ListDirectory; 
     try 
     { 
      WebResponse response = requestDir.GetResponse(); 
      return "ok"; 
     } 
     catch (Exception ex) 
     { 
      return ex.Message; 
     } 

Vấn đề của tôi rất đơn giản:

tôi tôi sử dụng một máy chủ tốt (một máy chủ FTP tốt), chức năng trở lại của tôi "OK". Nếu, sau đó, tôi sử dụng một máy chủ xấu, nó trả về một ngoại lệ

ERROR 421 : Service not available. Closing control connection. 

Nếu, atfer, nó re-test với adresse tốt, tôi có một thời gian mới ngoại lệ này.

Tôi cần phải đóng và mở lại ứng dụng của mình để giải quyết vấn đề này.

tôi thử với:

KeepAlive = true/false and no changes. 

Bất cứ ai có thể giúp tôi xin vui lòng?

Thanks a lot,

Trân trọng,

Nixeus

+1

Bạn có đang tạo yêu cầu mới về việc kiểm tra lại không? – alex

+0

Có bởi vì chức năng này nằm trong mã phía sau nút "KIỂM TRA". –

Trả lời

8

Bạn nên sử dụng lớp FtpWebResponse và đóng nó lại sau khi bạn thư mục niêm yết:

try 
{ 
    FtpWebResponse response = (FtpWebResponse)requestDir.GetResponse(); 
    string status = response.StatusDescription; 
    response.Close(); 
    return status; 
} 

biết thêm thông tin trong MSDN
Lưu ý:

Nhiều cuộc gọi đến GetResponse trả về cùng một đối tượng phản hồi; yêu cầu không được phát hành lại.

+0

Cảm ơn rất nhiều, nó hoạt động tốt :) –

9

Như FtpWebResponse thực hiện giao diện IDisposable, bạn cũng có thể sử dụng nó như thế này:

using (FtpWebResponse ftpWebResponse = (FtpWebResponse)requestDir.GetResponse()) 
{ 
    ... 
} 

Không cần phải gọi một cách rõ ràng phương pháp chặt chẽ.

Các vấn đề liên quan