我剛剛開始將應用程序移植到ASP.net MVC,並且我有一個對象持有應用程序狀態(它跟蹤在機器上運行的某些進程,根據需要啓動和停止以及發送/接收MSMQ消息)。ASP.net MVC:應用程序數據在哪裏?
我該在哪裏保持這個對象?在我目前的應用程序中(基於HttpListener),它是一個單例,但是我知道單例會讓測試變得困難。至少在MVC應用程序本身的情況下,嘲笑或測試這個對象是很困難的,它本身也有自己的一套測試。但是它可能需要替換爲測試存根。
該對象需要提供給多個控制器。我應該在哪裏存儲這個對象,我應該如何讓控制器可用?我從來沒有見過像我見過的任何ASP.net MVC示例中描述的情況。
UPDATE:
我想我需要解釋爲什麼我不能在此數據存儲在數據庫中。首先,我必須解釋應用程序的功能:
該應用程序提供由許多「引擎」動態生成的圖像,這些引擎是服務器上運行的進程,通過MSMQ進行通信。讓我們來調用這個對象,我正在問關於EngineManager的問題。過程如下所示:
- 客戶端向服務器POST一個XML請求,給出要使用的「引擎」的名稱,以及描述圖像的許多參數。
- 應用程序檢查EngineManager以查看該引擎是否正在運行。如果沒有,它會啓動它。
- 應用程序將MSMQ消息發送到引擎並等待響應。
- 應用程序將生成的圖像發送回客戶端。
- 如果在任何時候引擎關閉或崩潰,應用程序必須意識到這一點,以便它可以在對該引擎的下一個請求中重新啓動。
- 當應用程序關閉時,所有引擎也關閉。
有幾個控制器可以處理這些請求,每個控制器做一個稍微不同的工作。它們都需要與同一個EngineManager進行通信,因爲它在某些情況下也需要同步對其他資源的訪問。
正如您所看到的,它不是典型的數據庫支持的網絡服務器。
感謝編輯,更清晰。 – 2009-04-30 10:44:39