このコードを使用してC#(.Net 3.5)で記述されたアプリケーションがあります。
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();
...
これをF#(.Net 4.0)に変換して、アプリケーションで使用しました。
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
...
この時点で、FSIは文句を言います。
System.Net.WebException:リモートサーバーがエラーを返しました:(550)ファイルが利用できません(ファイルが見つからない、アクセスできないなど)。
それでも、C#アプリケーションが実行され、ファイルが正常にダウンロードされます。F#には何が欠けていますか(4.0にはないプロパティ、つまりKeepAlive、UsePassive、UseBinary以外)?