J'ai une application écrite en C# (.Net 3.5) avec ce code.F # FTP échoue où C# réussit
using System;
using System.Net;
string strURI = String.Format("ftp://x{0}ftp/%2F'{1}'", parm1, parm2);
FtpWebRequest ftp = (FtpWebRequest)FtpWebRequest.Create(strURI);
ftp.Proxy = null;
ftp.KeepAlive = true;
ftp.UsePassive = false;
ftp.UseBinary = false;
ftp.Credentials = new NetworkCredential("uid", "pass");
ftp.Method = WebRequestMethods.Ftp.DownloadFile;
FtpWebResponse response = (FtpWebResponse)ftp.GetResponse();
...
J'ai traduit cela en F # (.Net 4.0) à utiliser dans ma demande.
open System.Net
let uri = sprintf "ftp://x%sftp/%%2F'%s'" parm1 parm2
let ftp = FtpWebRequest.Create(uri) :?> FtpWebRequest
ftp.Credentials <- new NetworkCredential("uid", "pass")
ftp.Method <- WebRequestMethods.Ftp.DownloadFile
ftp.Proxy <- null
let response = ftp.GetResponse() :?> FtpWebResponse
...
A ce stade, FSI se plaint.
System.Net.WebException: The remote server returned an error: (550) File unavailable (e.g. file not found, no access).
Pourtant l'application C# s'exécute et télécharge avec succès le fichier. Que manque-t-il dans F # (à part les propriétés qui ne sont pas présentes dans 4.0, c'est-à-dire KeepAlive, UsePassive, et UseBinary)?
Pourquoi croyez-vous que les propriétés supplémentaires de 'FtpWebRequest' sont manquants? Ils sont [là] (http://msdn.microsoft.com/en-us/library/system.net.ftpwebrequest_properties%28v=vs.100%29.aspx): 'ftp.KeepAlive <- true; ftp.UsePassive <- false; ftp.UseBinary <- false' –
OK. Je jure, j'ai vérifié IntelliSense trois fois en l'espace de deux heures, et ces propriétés ne sont jamais apparues. Maintenant, ils le font. MAIS: ils ne font pas de différence. J'ai la même erreur. –
Ensuite, il est logique de regarder [ce SO] (http://stackoverflow.com/questions/6251169/ftpwebrequest-net-3-5-vs-4) que vous utilisez le mode FTP actif. Je vérifierais très rapidement que votre C# est OK sous .net 4.0 avant de suspecter F # de quelque chose de mal. –