2010-09-28 37 views
0

我目前正在努力解決與我一直在努力一段時間的網站有關的錯誤。我遇到的問題是當用戶同時致電該網站時,會話對象偶爾會被覆蓋。使用會話進程時對象成員損壞的問題

我的當前會話模式是在Proc中,並在閱讀another thread regarding a similar issue我相信我的問題可能有關。

該站點使用Sql Reporting Services通過查詢數據庫和使用來自兩個不同Web服務的XML來生成一些合法文檔。在會話中,我存儲一個自定義對象,其中包含保存數據的成員以在SRSS中生成文檔。

我在同一時間打開網站的兩個實例時發生了問題。會話ID是不同的,但是當我開始生成表單時,兩個對象以某種方式相互衝突。我仍然不確定它是如何發生的。

到目前爲止,我的想法是嘗試在會話中明確存儲班級中一些更敏感的成員,以明確是否有助於糾正某些腐敗或轉移到其他形式的會話管理。我有權訪問SQL服務器,所以我可以使用SQL會話存儲模式。

任何人有任何建議/想法?

+1

任何情況下,創建有問題的整個過程的順序圖確定您正在編寫和從會話對象中檢索的所有點。這個問題很可能會變得明顯。如果我不得不猜測,這聽起來像你可能會堅持一些相關的數據,可能是由用戶ID或其他商店的數據庫鍵入的數據庫正在寫入。每個用戶都獲得一個獨特的會話,並且據我所知,它獨立於登錄的實際用戶。 – Doug 2010-09-28 14:10:57

+0

對象數據存儲的唯一位置是在會話中。在自定義類中有2個靜態變量,並且它們只是保持用戶訪問站點的值而已。數據庫交互僅用於讀取報告查看器中使用的數據,目前沒有任何內容正在寫入數據庫。 – Philter 2010-09-28 15:08:47

+0

在這種情況下(您不知道問題出在哪裏),您需要開始收集信息(即添加日誌記錄或單步執行代碼)。我會從應用程序調用數據庫的地方開始。檢查每次調用傳遞給數據庫的參數值,以查看1.「它們與衆不同嗎?」或者2.「他們是否一樣?」。如果#1,那麼問題發生在那個點之後。如果#2,那麼問題發生在那個點之前。開始通過應用程序進行健康檢查,直到找到問題發生的位置。 – 2010-09-28 15:47:25

回答

1

我的猜測是,你在會話存儲可以自定義對象:

  1. 有一些靜態變量。
  2. 引用具有靜態變量的另一個對象。
  3. 也存儲在應用程序或高速緩存字典中或某處的靜態變量中。
  4. 引用一個對象,該對象也存儲在應用程序或高速緩存字典中或某處的靜態變量中。

我會建議分析您在會話中存儲的對象的對象圖,以查看是否有任何部分可以從多個線程基於上述標準1,2和4訪問。

如果一切看起來罰款對象圖,然後我可能會開始尋找對象如何填充,尋找3或4

+0

感謝您的幫助。我在代碼中注意到,當我正在介紹Web服務處理程序類是否返回舊的XML時,無論用戶如何。發現寫這個類的人正在使用被髮送到WebService的靜態字符串,並且字符串在站點調用之間存儲了舊數據。 – Philter 2010-09-28 16:33:12