2012-09-29 73 views
3

我有一個應用程序一直在丟失會話的問題,我幾乎肯定它與應用程序池回收太頻繁有關。SQLServer會話狀態管理丟失應用程序池回收

我想嘗試一個進程外解決方案並配置了SQLServer sessionState,但是當我回收工作進程時,我的會話仍然被吹走。這裏是我的web.config

<sessionState cookieless="false" stateConnectionString="tcpip=localhost:42424" mode="SQLServer" sqlConnectionString="Data Source=(local;User ID=user;Password=password" timeout="180" /> 

我已經跑了相應的SQL腳本設置數據庫,我可以看到一個會話創建並存儲在數據庫中,但如果我改變的web.config或手動回收工作進程我的會話丟失。我究竟做錯了什麼??

注意,我收到與StateServer模式完全相同的行爲。我似乎正確地配置它,我可以看到狀態服務內存佔用越來越大,當我登錄....我試圖推動一個非序列化的對象,並收到錯誤....但是當我回收應用程序池或更改web.config中我失去了會話....

我也試圖建立Memcached的會議提供商(這是我真的想使用),可以在這裏找到:http://memcachedproviders.codeplex.com/releases/view/10468

,它也在做同樣的事情!我可以看到正在數據庫中創建的會話,當我試圖與非序列化對象進行交互時,我會得到與序列化有關的錯誤....但是當應用程序池被回收時,我失去了會話。
使一些記錄,我在事件查看器中看到這個之後: 事件代碼:1003事件消息:應用程序編譯開始

沒有人?我真的需要退出進程會話狀態工作....幫助!

+0

也許你重置您的global.asax會影響您的會話數據? – Aristos

+0

是你把會話序列化的一切嗎? –

+0

你是如何確定會話丟失的?你如何使用會話狀態?如果您使用狀態服務器而不是SQL Server,是否也有相同的問題? –

回答

0

檢查您的設備密鑰(假設IIS 7.5)。如果您的Web服務器設置爲自動生成機器密鑰,那麼當您的應用程序回收並導致您丟失會話時,它可能會生成一個新密鑰。

請參閱此處的鏈接,以便爲您的Web應用程序生成獨特的機器密鑰。您應該能夠在Web服務器或Web應用程序級別生成它們。

http://blogs.msdn.com/b/amb/archive/2012/07/31/easiest-way-to-generate-machinekey.aspx

此外,FWIW,在SQL Server會話狀態管理器是非常對講機與數據庫。它可以工作,但是您將使用該會話提供程序訪問每個請求的數據庫。

+0

感謝您的迴應!我會查看鏈接。是的,我最初不想使用SQLServer,我想使用Memcached會話提供程序。你有沒有這方面的經驗,或者你能推薦另一種解決進程外會話狀態的解決方案嗎? – Cognitronic

+0

不幸的是,我不能推薦我實際上用於任何嚴肅的事情的另一個提供者。我查看了Couchbase會話狀態提供程序,看起來很有希望。 memcached提供者看起來很酷,但它能支持Windows上超過2 GB的數據嗎? – rsbarro

+0

@Cognitronic你有這個運氣嗎?另外,你使用的是什麼版本的IIS? – rsbarro