我想有一個「用戶消息」可用於每個請求由服務器發回。如果沒有用戶消息,則消息將變回空白。如果有,則在請求完成後,在每個用戶屏幕上激活一個圖標。c#.net內存中的持久性
「用戶消息」是由管理員爲我正在部署的應用程序設置的。管理員可以在字段中輸入文本,然後單擊按鈕將此消息發送給系統的其他用戶。任何時候,其他用戶執行任何類型的操作時,當前用戶消息都會附加到JSON響應並由前端處理。
爲了優化這個,我希望郵件被存儲在內存(不在數據庫中)。
我試過使用靜態。我試圖使用HttpApplicationState。在這兩種情況下,用戶消息的值在一段時間後都會「消失」。經過一番研究,似乎靜態和HttpApplicationState都受到IIS的約束,並且它決定回收應用程序池。 (或類似)
的靜態這個波動神祕:它應該是靜態 - 只要IIS自己的生命,這個變量應該活。它不應該依賴某種「重置」或任何其他。 HttpApplicationState是我不完全理解的其他一些情況。
我想要一種方法來將值存儲在我可以依賴的非易失性變量中。如果我今天設置了這個值,那麼只要IIS未停止並重新啓動,它應該在明天或下個星期。
任何幫助?
這裏是我做了什麼來解決這個問題按照下面的接受的答案:
- 用戶消息是某個東西。因此當某個管理員設置了該消息時,將該響應存儲在該時間點的數據庫中,並將其存儲在Application [「UserMessage」]對象中。
- 當來自用戶的往返進入時,用戶消息的內存中文本被添加到json返回值中。
- 消息可以隨時由管理員清除,這將清除內存中的消息和數據庫字段。
- 當IIS決定足夠的時間並且回收應用程序時,Application_Start()方法(以及其他任務)也會將用戶消息從設置了用戶消息時存儲的數據庫值中重新排序(按照步驟1 )。
現在應用程序按預期工作。沒有額外的價格支付到數據庫爲每個用戶請求進入系統 - 用戶消息總是來自內存。除此之外,數據庫更新或加載用戶消息的次數很少。
看到我的回答,你可以使用application_start來恢復變量,如果它從內存中被銷燬。這隻發生在IIS回收您的應用程序時。 –
謝謝喀布爾,我已根據您的回覆更新了原始問題以闡明我的請求。抱歉的渾濁.. – horace
你總是可以把消息放在應用程序緩存中,也可以放在數據庫中。當第一次管理員發送消息時,你需要做的是把它放在數據庫和應用程序緩存中。您的代碼將始終從應用程序緩存中發送消息,但由於應用程序緩存將在應用程序重新啓動後失效,因此您需要從application_start上的數據庫中重新加載它。 –