2013-07-10 23 views
8

Vorrei creare una funzione C# per testare una connessione a un server FTP.Chiudi/elimina un FtpWebRequest

Qui è la mia funzione:

 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; 
     } 

Il mio problema è molto semplice:

ho io uso un buon padrone di casa (un buon FTP Host), la mia funzione di ritorno "OK". Se, dopo, io uso un cattivo padrone di casa, è restituire un'eccezione

ERROR 421 : Service not available. Closing control connection. 

Se, atfer, si ri-testare con il bene adresse, ho un nuovo tempo di questa eccezione.

Ho bisogno di chiudere e riaprire la mia applicazione per risolvere questo problema.

cerco con:

KeepAlive = true/false and no changes. 

Qualcuno mi potrebbe aiutare per favore?

Grazie mille,

Con i migliori saluti,

Nixeus

+1

Stai creando una nuova richiesta per il tuo nuovo test? – alex

+0

Sì perché questa funzione si trova nel codice dietro un pulsante "TEST". –

risposta

8

Si dovrebbe utilizzare la classe FtpWebResponse e chiudere dopo aver ottenere elenco di directory:

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

Ulteriori informazioni nel MSDN
Nota:

Più chiamate a GetResponse restituiscono lo stesso oggetto risposta; la richiesta non viene riemessa.

+0

Grazie mille, è un buon lavoro :) –

9

Come FtpWebResponse implementa l'interfaccia IDisposable, è anche possibile utilizzare in questo modo:

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

Non c'è bisogno di chiamare in modo esplicito il metodo close.

Problemi correlati