2010-06-02 57 views
0

我正在製作一個.net組件,導致一個dll程序集,它將被一個asp.net站點引用,另一個項目由一個asmx webservice引用。所有代碼都是2.0版。.net(asp和webservice)中的會話信息

該組件有一些調用外部web服務的函數,它返回一個對象。這些功能之一是例如登錄(用戶名,密碼),其中爲用戶生成唯一的會話ID。結果信息和會話ID存儲在組件中的變量中。

該網站的問題是: 當用戶登錄到前端,並且我的組件被調用並檢查登錄並生成會話ID時,我希望組件中的信息在用戶瀏覽時保留網站中的另一個頁面。

使用我的組件的Web服務中的問題是: 我並不十分在意會話狀態,但我希望組件正常工作。如果每個呼叫生成一個新的會話ID,那沒關係。

兩種環境的結合導致以下問題對我來說:

  • 我不能用我的組件asp.net會議()變量而不引用的System.Web,這是有點愚蠢的,在包括我的組件的Web服務項目可能無法使用
  • 我不能計劃我的組件作爲一個單身,因爲那樣的話在網站上的應用程序,它的所有遊客之間共享,覆蓋會話和諸如此類的東西
  • 形成陣列在我的組件中「會話信息」,並保持很難編程(wh en是否會失效?),並且可能無法在Web場環境中工作

有沒有解決這種情況的方法?或者我應該創建兩個組件實例,一個用於網站,另一個用於Web服務?

+0

將它存儲在數據庫中? – Greg 2010-06-02 15:16:15

+0

不幸的是,我將無法訪問組件將被使用的數據庫。 – Tominator 2010-06-02 15:31:51

回答

1

我創建具有.Create(按地址會話爲HttpSessionState一個額外的類「工廠」 ),看看傳入的會話對象是否爲Nothing,如果不是,則檢查其中是否存在Component對象,如果是,則使用它,如果不是,則創建它並將其添加到會話中。

在webservice調用的情況下,工廠獲取Nothing參數,因此它不檢查會話對象。它似乎工作。

感謝您的回答!

1

也許我不理解你的要價,但你爲什麼不能這樣做:

Component.Login(user,pass); 
Session["Component"] = Component.SessionID 
+0

因爲不幸的是,有更多的變量,而不僅僅是sessionid,也因爲使用這個原則,我要求使用我的組件的程序員必須確保他也會執行會話存儲部分(而不是僅僅使用它的方法並依靠它只是工作)。如果我的組件本身會照顧存儲,那會更容易。也許我試圖過分簡化對方? – Tominator 2010-06-02 15:09:20

+0

你還記得什麼? – cptScarlet 2010-06-02 16:56:43

+0

具有多個值的數組和更多數組的較大對象。有點難以解釋究竟是什麼,只是一堆數據..但我已經決定,用戶可以傳遞一個會話參考,如果他想要的話,並與該對象得到保存。如果他什麼都沒有通過,它就不會得救。我猜兩個世界都是最好的.. – Tominator 2010-06-03 07:53:10