2012-04-28 21 views
0

問題: 我正在使用Silverlight應用程序,並且正在將大量數據加載到DomainContext中,即從Web服務中加載。它開始運行幾個不同的查詢,BusyIndi​​cator顯示當前查詢,但是當它到達數據最多的查詢時,它會凍結。幾分鐘後,它表示服務器不響應下一個查詢。Silverlight在加載DomainContext數據時出現死機

調試/嘗試的解決方案: 當我加載較少的數據時,系統工作。我假設它超時了,這就是爲什麼它說下一個查詢不存在,即它甚至不能聯繫web服務。我環顧四周,人們建議增加超時和最大結果大小。這些解決了其他問題,所以我知道它們的工作原理(即它們正在被應用),但它不能解決這個問題。

我試着隔離問題,以確保它不是一些其他與加載數據無關的愚蠢問題。從Web服務中的查詢功能返回時出現問題(返回結果;下面的),即Web服務本身不應該存在問題。因此這兩個調試打印都被執行,第二個打印2726個元素。

Web服務代碼:

public IQueryable<Person> GetPeopleWithSubscription() 
{ 
    Debug.WriteLine("Before"); 
    IQueryable<Person> result = test(); 
    Debug.WriteLine("After " + result.Count().ToString()); 
    return result; 
} 

private IQueryable<Person> test() 
{ 
    return this.ObjectContext.People.Where(p => 
     p.Subscriptions.Count > 0 || 
     p.Subscriptions1.Count > 0 || 
     p.ID < 0); 
} 

調用代碼:

... 
_context.Load(_context.GetSubscriptionTypesQuery(), DataLoaded, false); 
... 

而且,這個問題似乎是在客戶端,因爲舊的客戶端(即在問題發生之前)仍然有效與新的服務器。但是,自從發生問題以來,我一直在研究存儲庫中的差異,我找不到任何應該有所作爲的東西(並不是說它不存在)。

任何人都可以幫我解決這個問題嗎?如果您需要更多信息,請告訴我。

回答

0

最近閱讀了WCF框架的工作原理以及它背後的哲學。如果您阻止GUI,Microsoft不建議使用超時時間。他們主張,如果通話時間超過60秒,則可能需要重新設計。你有沒有考慮過使用分頁,我知道這個UI模式可能不適用於所有類型的數據,但是如果你正在加載那麼多的數據,那麼用戶需要同時看到所有數據似乎是不可能的。

幾個星期前,我遇到了類似的問題,我們將web服務實現更改爲使用多線程設計執行多次插入。這使我們能夠將服務的處理時間縮短到60秒以內。

希望這會幫助你,

乾杯,

相關問題