2014-02-12 77 views
1

我做以下,檢查,如果網絡服務已經啓動並運行 - 高效

var request = (HttpWebRequest)WebRequest.Create(serviceUrl); 
var response = (HttpWebResponse)request.GetResponse(); 
if(response.StatusCode == HttpStatusCode.OK) 
{ 
    //perform some operations. 
} 

,以檢查是否在起來,在我的asp.net C#4.0的應用程序運行的服務。 它給了我預期的結果,但如果服務沒有運行,它會花費太多時間(大約1分鐘)才能得到響應。

是他們檢查服務是否正常運行的更好方法?

+0

或請參閱['HttpWebRequest.Timeout 'property](http://msdn.microsoft.com/en-us/library/system.net.httpwebrequest.timeout(v = vs.110).aspx)。 – CodeCaster

回答

0

您的要求超時房產不會讓故障響應在短時間內交付。回到this link,這裏超時的情況很好,也請訪問答案中提供的鏈接。您應該考慮使用異步調用Web服務(查找異步調用Web服務here)。

0

除了向請求對象添加超時之外,您不必做比您已經做的更多的事情。請求超時應以毫秒爲單位指定,因此5000需要5秒超時。

要知道,那麼你就需要捕獲該異常檢測超時,這是一個System.Net.WebException與消息The operation has timed out,所以你的代碼看起來是這樣的:

var request = (HttpWebRequest)WebRequest.Create(serviceUrl); 
request.Timeout = 5000; 
try 
{ 
    var response = (HttpWebResponse)request.GetResponse(); 
    if (response.StatusCode == HttpStatusCode.OK) 
    { 
     //perform some operations. 
    } 
} 
catch (WebException wex) 
{ 
    if (wex.Message == "The operation has timed out") 
    { 
     // do stuff 
    } 
} 
+0

:謝謝你的答覆。但是如果服務正在運行並假設@10秒響應 – user3085995

+0

如果你「期待」10秒的回報,那沒問題,那麼使用11秒的超時時間。但是,如果您想要計算需要多長時間才能返回,請使用長時間超時(60秒),然後使用類似「秒錶」的方法計算返回所需時間。 –

+0

我目前的狀況是,我的服務沒有正常運行,並且仍然以@ 1分鐘的時間來獲得響應。我可以在這種情況下獲得即時響應(如果服務未運行)。 – user3085995

相關問題