2012-03-26 61 views
4


您好
Windows Phone應用程序需要連接到服務器並從中獲取消息。這是使用WCF和服務器上的長輪詢完成的。 3分鐘是服務器上定義的超時時間。來自Windows Phone的呼叫是使用HttpWebRequest完成的。
問題是,Windows Phone設備的獲取請求(模擬器具有不同的值,大於3分鐘)的超時時間爲60秒。
目前我無法減少服務器超時。在60秒後執行新的GetRequest不會再收到消息。
有沒有人有想法?
謝謝長查詢Windows Phone 60秒TimeOut

回答

3

我不認爲打開連接是移動設備上的一個好主意。我假設你在做什麼。在我的應用程序中,我只需通過創建新的HttpWebRequest來進行輪詢。但在我的應用程序中這樣做是有道理的,因爲我會每40秒更新一次列車到達狀態。

如果您試圖按照給定的計劃提取數據,請將計時器放入,然後每隔3分鐘或每隔一段時間調用Web服務器。

如果您希望能夠檢查某些事情(應用程序關閉時)或者服務器上很少有新數據,那麼您需要實現一個Push機制。

更新:下面是關於處理超時問題的好文章 - http://blog.xyzzer.me/2011/03/10/real-time-client-server-communication-on-windows-phone-with-long-polling/

更新2:如果你安排好了,這樣,你級聯連接 - 我的意思是,因爲你可以」每次連接超過60秒時,您可以編寫一個可容納兩個連接的課程,並且一旦其中一個即將超時(比如幾秒鐘前),您可以開始打開其他連接 - 您可以選擇時間,以便它們之間至多有5秒的重疊。這樣你就可以始終打開連接。

另請參閱這些人使用GChat應用程序所做的工作,他們的源代碼位於link。這可能會提供更合適的設計。

+1

我已經看到了這篇文章,這個例子使用超時時間爲50秒,在這種情況下沒有問題。我無法在我的應用程序中確定消息在服務器上何時可用。它就像一個聊天應用程序,所以我總是需要檢查是否發送了新消息,所以長時間輪詢比進行大量獲取操作要好。 – Morti 2012-04-02 09:00:16

+0

我認爲這是設計。移動連接不應長時間保持開放/閒置狀態。你最好的選擇是Push。在這裏看到更多的信息:http://msdn.microsoft.com/en-us/library/ff402537(v=vs.92).aspx – 2012-04-03 05:57:08

+1

不能使用推,因爲我說它就像一個聊天消息,我不能有超過2秒的延遲。爲了更具表現力,它就像一個Siri應用程序,需要非常快速地響應,此外,這個應用程序不僅僅在windows phone上,所以實現推送通知系統需要第三次完成此操作,並且需要更多時間才能獲得響應。 – Morti 2012-04-03 07:38:22