我有一個用C#(.Net 3.5)編寫的應用程序。F#FTP失敗,其中C#成功
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: The remote server returned an error: (550) File unavailable (e.g. file not found, no access).
然而,C#應用程序運行併成功下載文件。我在F#中缺少什麼(除了4.0中沒有的屬性,即KeepAlive,UsePassive和UseBinary)?
爲什麼你認爲'FtpWebRequest'缺少的額外屬性?他們[there](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' – 2013-03-26 19:13:29
好的。我發誓,我在兩個小時的時間內檢查了三次IntelliSense,並且這些屬性從未出現過。現在他們做到了。但是:他們沒有區別。我犯了同樣的錯誤。 – 2013-03-26 20:54:48
然後當你使用主動ftp模式時,看看[這個SO](http://stackoverflow.com/questions/6251169/ftpwebrequest-net-3-5-vs-4)是有意義的。我會很快檢查你的C#在.net 4.0下是否正確,然後懷疑F#有任何錯誤。 – 2013-03-26 22:20:10