2012-02-27 70 views
2

我寫一個混合(網絡/桌面)軟件和它發生要加載的兩個模塊之間的同步提高超時異常。TidHTTPClient上代碼304

我試圖在它們之間的通信,以使用盡可能多的HTTP代碼越好。

在服務器端我的Rails 3和Ruby 1.9(如果該事項對這個問題)。在桌面方面,我使用的是Delphi 7和Indy 9.0.50。

當我試圖得到更新的數據並沒有在服務器端沒有什麼新的,我的服務器API返回代碼304(不修改)至極我理解爲在這種情況下,最apropriate代碼。但是indy組件(TidHTTPClient)引發了超時異常(特別是EIdReadTimeout)。它實際上「等待」了幾秒鐘,導致我不舒服的延遲。

這種行爲好嗎?我是否使用不合適的HTTP代碼?有沒有辦法避免組件等待數據,一旦它永遠不會確定?

+0

這是在IDE中運行應用程序時引發的異常嗎?如果是這樣,那麼如果你在try..except和IDE沒有運行之間運行TIdHTTPClient.GET,你不應該得到一個異常...... – ComputerSaysNo 2012-02-27 23:17:57

+0

我看到兩個問題。首先,響應304用於「條件GET」請求;你發送一個有條件的GET請求嗎?其次,Indy 9是古老的;請升級到版本10.至於爲什麼它會超時,我不知道。使用調試器來查看發生的事情,然後回頭看看Indy爲什麼決定發生超時。 – 2012-02-27 23:54:09

回答

6

TIdHTTP在印第安納波利斯9不支持有條件的GET請求。 TIdHTTP在印第安納波利斯10確實,和一些Get()重載版本有一個新的AIgnoreReplies參數,你可以通過304到如果EIdHTTPProtocolException異常被提出。