用FtpWebRequest下載大檔案時,出現了Connection Closed Exception,除錯過程中懷疑是逾時間題,所以我找到FtpWebRequest有以下兩個Timeout相關屬性:

  • Timeout: 指完成Request的逾時限制,文件上說預設值是Infinite(-1),永不逾時。
  • ReadWriteTimeOut: 每次寫入或讀取Stream動作所允許的Timeout。

文件說Timeout的預設值是無限大,但為了謹慎起見,我還是進入Debug Mode,看了FtpWebRequest Instance的Timeout值,100000!! What? 不是應該是-1嗎?

這激發了我的好奇心,套足柯南的名言: "真相只有一個!",再挖進去,用Reflector解析了System.Net.FtpWebRequest,看到以下的Code:

static FtpWebRequest()
{
    m_AsyncCallback = 
    new GeneralAsyncDelegate(FtpWebRequest.AsyncCallbackWrapper);
    m_CreateConnectionCallback = 
    new CreateConnectionDelegate(FtpWebRequest.CreateFtpConnection);
    DefaultFtpNetworkCredential = 
    new NetworkCredential("anonymous", "anonymous@", string.Empty, false);
    s_DefaultTimeout = 0x186a0;
    s_DefaultTimerQueue = 
    TimerThread.GetOrCreateQueue(s_DefaultTimeout);
}

Bingo! 0x186a0==100,000,就是Debug時看到的數字。

還在想如何通報此一文件錯誤,就驚喜地發現新版的MSDN官方文件提供了Developer Community直接在文件上寫註解(Community Content)的功能。於是,我在MSDN Library留下了我第一個腳印

Web 2.0時代,Content Provider與Consumer的界線愈來愈模糊,另一場資訊革命正悄悄展開!


Comments

Be the first to post a comment

Post a comment