我的要求緩存ASP.NET用戶是從背後ASP.NET代碼中調用WCF Web服務,並通過一些數據,例如:WCF服務中的相關數據
操作void Add(int x, int y);
結果應該以某種方式存儲內WCF Web服務(成員變量)。 後來用戶應該能夠調用
double Equals();
,並獲得操作的結果。當然,因爲它是一個開放的網站,許多未經過身份驗證的用戶可以打開ASP.NET頁面並調用Web服務。
或者添加方法可以返回一個可用於獲取結果返回「鍵」,例如:
Guid Add(int x, int y);
double Equals(Guid key);
我不認爲我可以使用WCF會話,因爲Web服務會認爲只有一個客戶端(Web站點調用IIS中託管的webserivce)。
用戶未通過身份驗證 - 他們是匿名用戶。
我可以使用:(請看看我的編輯)
InstanceContextMode =InstanceContextMode.Single
的屬性在我的web服務和存儲Dictionary<key, result>
但問題是我何時可以從字典中刪除的條目?
我應該使用某種BackgroundWorker來檢查字典嗎? 15分鐘,並刪除舊條目?在這種情況下,我將不得不存儲日期時間對每個條目,但這不是一個問題,如果這是實施此解決方案的最佳方式...
我的示例添加/等方法只是爲了說明問題,真正的需求需要每個用戶更多的數據存儲比簡單double
結果
預先感謝所有幫助。
編輯:
考慮更多的InstanceContextMode =InstanceContextMode.Single
後,我認爲這不是與ASP.NET使用,因爲如果100個用戶將調用Web服務,同時我會得到100個連續調用這將是最好的選擇導致性能問題。
在這種情況下,你有沒有任何想法如何實現這一點,而無需更改InstanceContextMode設置(默認情況下,PerSession據我所知)?
感謝您的回覆。我正在考慮InstanceContextMode.Single,現在我想我不能使用它...請參閱我的編輯瞭解更多詳細信息。如果您有任何其他想法如何實施,請讓我知道。謝謝 – Lucas 2010-09-17 10:49:21
您可以考慮更改節流行爲和併發模式。 – 2010-09-17 10:56:31
請參閱我以前的答案的編輯,如果解決方案可以解決您的問題,那麼請不要忘記標記爲答案:-)) – 2010-09-17 11:36:04