2011-08-30 77 views
2

我們使用HttpWebRequest對象在應用程序的服務器和客戶端部分之間交換數據。當服務器的IP無法到達或無效(發生這種情況時,發生應該發生)客戶端要麼停止等待3秒後(這是我設置的超時),要麼等待一分鐘,這取決於它運行在哪臺電腦上! 代碼如下:.NET HttpWebRequest超時在某些計算機上顯然被忽略

HttpWebRequest webRequest = null; 
WebResponse webResponse = null; 
webRequest = (HttpWebRequest)WebRequest.Create(serverURL); 
webRequest.Timeout = 1000 * 3; //3 seconds 
webRequest.ReadWriteTimeout = webRequest.Timeout; 
webRequest.AllowWriteStreamBuffering = true; 
//Adding headers here; code removed 
webRequest.Proxy = null; 
webResponse = webRequest.GetResponse(); 

繼發出請求更快的意見就是我的網站和其他人發現,我還設置了ReadWriteTimeout屬性和設置代理服務器爲null。 雖然它在我自己的計算機和其他人已經嘗試過的3秒後正確停止,但在大約40秒後它不會停止。 我再說一遍,如果它試圖連接到無效的地址(如我們的子網內不存在的IP),並且「使用正確的IP」不是一個可接受的解決方案(我可以解釋爲什麼,但我認爲這將脫離主題)。如果它連接到一個確實存在的IP,那麼數據交換就像它應該的那樣快。

有沒有人看過類似的東西?

+0

實際上已經測量這個40秒了嗎?你沒有達到15秒的DNS超時,你是在[備註]中列出的[超時屬性](http://msdn.microsoft.com/en-us/library/system.net.httpwebrequest.timeout.aspx) –

+0

我建議打開'System.Net'的跟蹤並檢查日誌。看到這篇文章http://blogs.msdn.com/b/dgorti/archive/2005/09/18/471003.aspx –

+0

確實已經測量了40+秒。我讀過DNS超時可能是「15或更多」秒,但我想這並不能免除它。有沒有辦法覆蓋它? – Indridius

回答

0

我不知道爲什麼這件事會發生,但我認爲你可以使用ping作爲一種變通方法,如果您有IP(不是域名):

Console.WriteLine(new Ping().Send(IPAddress.Parse(ipAddress)).Status);