2011-02-01 58 views
3

我創建使用一次服務呼叫被啓動,可能需要相當多的時間RIA服務在Silverlight應用程序。我一直在尋找增加WCF服務超時的方法,但是我越想越好,這不是正確的方法。輪詢模式的Silverlight 4的WCF RIA服務

我寧願做的就是調用DomainContext並立即返回,然後讓客戶端輪詢服務器以找出長時間運行的查詢是否完成。

我找的實現是這樣的一個好辦法圖案或例子。一直想到的一個潛在問題是,Web服務不應該在服務調用之間保持狀態,但這正是我所要做的。

有什麼想法?

感謝,

斯科特

回答

0

你能不能讓服務調用需要更少的時間?如果不是,爲什麼不呢?

通常當我見過長的查詢藉此,它要麼意味着在最後運行的SQL效率不高不夠,SQL服務器有差指標,或客戶端請求更多的數據比他們實際上會能夠在短時間內使用。例如,與其立即請求500個實體並顯示大型列表/ DataGrid /任何內容,爲什麼不一次請求10-50,並且具有隻在用戶需要時請求下一批次的分頁UI?

+0

不幸的是,我正在搜索一個搜索索引,根據搜索的條件,它可能會帶回數千行。我無法在查詢中「跳過」X個結果,或者我會實現某種分頁系統。我真的需要所有的結果 - 如果不是馬上,在搜索後的很短時間內。這就是爲什麼我想我可以將完整查詢的狀態保存在服務器上,並在完成時回來獲取。我同意你的看法,那就是太多的數據無法立即恢復,但我找不到任何其他方式。其他建議? – Scott 2011-02-02 06:08:39

+0

是否因爲您不控制您查詢的搜索索引?我認爲在這種情況下,「最RIA服務的方式」是增加超時時間,而不是輪詢 - 「DomainContext」只需要很長的時間來填充,所以你的UI應該有某種指標,而「LoadOperation」正在進行中,但最終它將全部填充「INotifyCollectionChanged」事件並更新UI。 – 2011-02-02 07:49:40

+0

當然,我建議你跟你所查詢的索引的所有者交談,讓他們知道「嘿,我將要求更多的數據,而不是我需要的,並且花費你更多的帶寬。如果你可以以分頁的方式將數據公開給我,那對我們兩人來說都會更好「,並看看他們說了些什麼。也許他們會接受這一點,因爲它對你們和這個指數的任何未來客戶都有好處:)不會傷害到問。 – 2011-02-02 07:50:50

0

看看signalr,它可以通過與RIA邊運行邊,它可以讓你從服務器推送消息返回給客戶端。