2009-02-26 62 views
1

如何爲ASP.Net應用程序持久化用戶特定數據。ASP.Net在整個應用程序中持久化數據

我試過會話變量 - 工作進程回收時不好。

我需要一些可以被我的應用程序的任何類別全局訪問的東西。

建議最受歡迎。

我試圖利用asp.net會話狀態服務器,但我有一些DLL崩潰,因爲它們是Unserializable。

是否有任何其他方式在應用程序中擁有持久變量?

+0

數據需要持續多久?任何超過幾個小時的時間,你都應該考慮將它存儲在服務器上或sql中。下面的答案提到了asp.net個人資料,這可能是一個很好的開始 – 2009-02-26 15:55:25

回答

1

將數據存儲在數據庫(如SQL Server)中。

0

您可以使用配置文件提供一個SQL數據庫作爲後備存儲。

看到這個MSDN Article

+0

關心顯示一些文章或例子?謝謝。 – Batuta 2009-02-26 15:37:16

0

你無須真正做到對進程回收。如果您巧妙地使用緩存來保留更具全局意義的信息,但您仍然具有相同的工作進程限制。

我嘗試在具有業務實體對象的n層設置中設計我的應用程序。我的對象的工廠方法使用緩存類型,就像一個懶惰的即時模式。如果它在cahce中,拉它。如果沒有,請將其放入下次緩存中。

MyAppsNameSpace.MyBusinessLayerNameSpace.MyObject.GetObject(objectID) 

現在,當它返回我的對象​​,也可能是從緩存中也可能不會,如果對象是在高使用率那麼它將可能被緩存。

這可以在整個應用程序中使用,因爲緩存機制是集中維護的,所以您不必擔心它。

+0

你會發布更多的例子嗎?一篇文章也許?謝謝。 – Batuta 2009-02-26 15:36:43

1

您可以將會話狀態服務器更改爲不在進程中,這樣會使其更加穩定並將其與工作進程分離(您需要能夠在服務器上啓動Asp.NET狀態服務如果它沒有運行)

<sessionState mode="StateServer" stateConnectionString="tcpip=127.0.0.1:42424" sqlConnectionString="data source=127.0.0.1;Trusted_Connection=yes" cookieless="false" timeout="20"/> 

此外,如果您需要在應用程序之間共享在同一個域中,你應該能夠給他們同樣的machine key

+0

我實際上正在考慮使用StateServer模式,但我需要知道是否有任何需要在我的IIS服務器中配置的特定項。謝謝。 – Batuta 2009-02-26 15:38:44

+0

順便說一句,我想知道爲什麼StateServer模式還有一段時間?如果狀態服務器模式超時,那麼存儲在會話中的變量也被殺死了嗎? – Batuta 2009-02-26 15:45:36

1

您應該使用會話。您可以在全球範圍訪問會話狀態在這樣一類...

HttpContext.Current.Session 

爲了避免由工作進程回收丟失的會話,使用StateServer模式。

0

如果在工作進程重新啓動時丟失數據,則應該停止使用會話的InProc持久性模式。使用StateServer或SQL Server。如果你不滿意,最終你可以建立自己的會話持久性模塊。

相關問題