2010-12-02 59 views
8

Necesito una guía. Necesito desarrollar un FTP personalizable en C# que se deba configurar con el archivo App.Config. Además, el FTP debe enviar los datos a cualquier servidor desde cualquier cliente, de nuevo depende del archivo de configuración.FTPS (FTP sobre SSL) en C#

Agradeceré si alguien puede guiarme, si hay alguna API u otra sugerencia útil, o me mueve en la dirección correcta.

Respuesta

3

Utilizamos edtFTPnet con buenos resultados.

+4

Sólo para dar a conocer la versión gratuita no soporta FTPS, la versión Pro hace – tsukimi

15

Puede usar FtpWebRequest; sin embargo, este es un nivel bastante bajo. Hay una clase de nivel superior WebClient, que requiere mucho menos código para muchos escenarios; sin embargo, no es compatible con FTP/SSL de forma predeterminada. Afortunadamente, usted puede hacer WebClient trabajo con FTP/SSL mediante el registro de su propio prefijo:

private void RegisterFtps() 
{ 
    WebRequest.RegisterPrefix("ftps", new FtpsWebRequestCreator()); 
} 

private sealed class FtpsWebRequestCreator : IWebRequestCreate 
{ 
    public WebRequest Create(Uri uri) 
    { 
     FtpWebRequest webRequest = (FtpWebRequest)WebRequest.Create(uri.AbsoluteUri.Remove(3, 1)); // Removes the "s" in "ftps://". 
     webRequest.EnableSsl = true; 
     return webRequest; 
    } 
} 

Una vez hecho esto, puede utilizar WebClient casi como normal, excepto que sus URIs comienzan con "ftps: //" en lugar de "ftp: //". La única advertencia es que debe especificar el parámetro method, ya que no habrá uno predeterminado. P.ej.

using (var webClient = new WebClient()) { 
    // Note here that the second parameter can't be null. 
    webClient.UploadFileAsync(uploadUri, WebRequestMethods.Ftp.UploadFile, fileName, state); 
} 
+0

A partir de los comentarios de [una respuesta duplicado] (https://stackoverflow.com/a/31432519/1869660): Para aceptar automáticamente cualquier certificado que el cliente pueda encontrar, esto funciona: 'ServicePointManager.ServerCertificateValidationCallback + = (sender, certificate, chain, sslPolicyErrors) => true;' – Sphinxxx

+0

@Sphinxxx Solo tenga en cuenta que aceptar ciegamente cualquier certificado de servidor lo deja vulnerable a un ataque de hombre en el medio. –

+0

Sí, no es la solución más elegante. ¿Tienes una alternativa más segura? – Sphinxxx