2008-10-25 45 views
2

我有一個Web應用程序,它大量使用會話狀態來存儲關於當前用戶的信息,他們的個人設置,記錄他們的會話歷史記錄等等。如何提供在Windows和Web應用程序中使用的會話/主機對象?

我發現自己取回我的業務層本次會議的信息,像這樣:

​​

這就帶來了一個問題 - 在將來某個時候我的應用程序將有一個Windows客戶端,這顯然不能引用Web會話狀態。所以我需要一個主機或自定義的會話類,我可以在我的業務層中引用它,而不管該應用程序是否在Web或桌面上運行。喜歡的東西:

IHost.User.Info 

在幕後,網絡實施,將明顯利用會話狀態來存儲信息,但我需要隱藏這從我的業務層了。有沒有人解決這個問題或得到任何實用建議如何最好地處理這個問題?

幫助讚賞。

回答

2

假設業務層是一個單獨的DLL,我絕不會添加對System.Web的引用,因此我絕不會直接使用Session對象。這會導致業務層的不同設計以及客戶端的暴露接口(Web或WinForms)。

也就是說,作爲一個快速的解決方法,我會建議在業務層中編寫一個包裝類,它將代碼中的Session對象隱藏起來。從代碼的調用將是這樣的:

((UserSession) DualContext.Current["UserSession"]).User.Info 

和包裝實施將是這樣的(未完成和測試):

public class DualContext 
{ 
    private Dictionary<string, object> winFormsSession = new Dictionary<string, object>(); 
    private static readonly DualContext instance = new DualContext(); 

    public static DualContext Current 
    { 
     get { return instance; } 
    } 

    public object this[string key] 
    { 
     get 
     { 
     if (HttpContext.Current != null) 
      return HttpContext.Current.Session[key]; 
     else 
      return winFormsSession[key]; 
     } 
     set 
     { 
     if (HttpContext.Current != null) 
      HttpContext.Current.Session[key] = value; 
     else 
      winFormsSession[key] = value; 
     } 
    } 
} 
-2

我想你需要創建一個webservice或RESTfull服務。該服務將返回一個代表您的用戶信息的XML文件。您將能夠從您的Windows或Web應用程序中調用該服務。

+0

林不知道我很好地解釋了我的問題。用戶信息在他們登錄時填充,所以我不設想調用Web服務。在網絡上,我必須將用戶信息存儲在會話狀態中,但會話在Windows客戶端中不可用,我想在Web和客戶端中使用相同的BLL – flesh 2008-10-25 13:20:55

相關問題