2008-09-25 66 views
1

我們需要調出第三方使用REST來檢索值,但是如果我們沒有收到10ms以內的響應,我想使用默認值,然後繼續處理。在服務器端強制執行嚴格的超時政策的WebRequest

我傾向於使用異步WebRequest做到這一點,但我想知道是否有一個技巧使用同步請求來做到這一點。

有什麼建議嗎?

+0

當涉及到Web請求,10ms的真的* *不那麼長,你可能會發現,更多的時候不是,你只需要使用默認設置,雖然在理論上緩存應該幫助這裏。但總的來說,這個問題只是關於在超時時間內異步執行某些操作。 – thecoshman 2015-07-23 10:10:55

回答

2

如果你正在做的請求,並等待其返回我會說留同步 - 我們沒有理由做,如果你不打算做任何事情或響應停留在等待一個異步請求。

對於同步調用:

WebRequest request = WebRequest.Create("http://something.somewhere/url"); 
WebResponse response = null; 
request.Timeout = 10000; // 10 second timeout 
try 
{ 
    response = request.GetResponse(); 
} 
catch(WebException e) 
{ 
    if(e.Status == WebExceptionStatus.Timeout) 
    { 
    //something 
    } 
} 

如果做異步:

你將不得不請求對象上調用中止() - 你需要檢查自己的超時,沒有建 - 以強制超時的方式執行。

+0

不會異步允許CPU在等待回調時安頓下來? 也許不是,但那就是我用我寫的服務做了什麼。它每30秒調用一個網站,但它是異步執行的。如果在最後一次請求結束之前30秒出現,則返回到睡眠狀態。 – 2008-09-25 18:21:04

0

您可以將您的呼叫封裝到WebService中的第三方。然後,您可以從您的應用程序中同步調用此WebService - Web服務引用具有一個簡單的超時屬性,您可以將其設置爲10秒或其他任何內容。

您的來電從您的WebService第三方數據將拋出引發WebException超時時間過去之後。你可以捕捉它並使用默認值。

編輯:菲利普的迴應更好。 RIF。