Windows 및 웹 애플리케이션 모두에서 사용하기 위해 세션/호스트 객체를 제공하는 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/236362

문제

세션 상태를 많이 사용하여 현재 사용자, 개인 설정에 대한 정보를 저장하고 세션 기록을 기록하는 등 웹 응용 프로그램이 있습니다.

나는이 세션 정보를 비즈니스 계층에서 검색하는 것을 발견했습니다.

((UserSession)HttpContext.Current.Session["UserSession"]).User.Info

이것은 문제가 발생합니다 - 앞으로 어느 시점에서 내 응용 프로그램에는 Windows 클라이언트가있어 웹 세션 상태를 참조 할 수 없습니다. 따라서 응용 프로그램이 웹 또는 데스크탑에서 실행 중인지 여부에 대한 비즈니스 계층에서 참조 할 수있는 호스트 또는 사용자 정의 세션 클래스가 필요합니다. 같은 것 :

IHost.User.Info

무대 뒤에서 웹 구현은 세션 상태를 사용하여 정보를 저장하지만 비즈니스 계층에서이를 숨겨야합니다. 이 문제를 해결 한 사람이 있거나이 문제에 가장 적합한 방법에 대한 조언을받은 사람이 있습니까?

감사합니다.

도움이 되었습니까?

해결책

비즈니스 계층이 별도의 DLL이라고 가정하면 결코 참조를 추가하지 않을 것입니다. System.Web 그리고 결과적으로 나는 결코 사용하지 않을 것입니다 Session 직접 개체. 이로 인해 비즈니스 계층의 다른 디자인과 클라이언트 (웹 또는 윈 포름)에 대한 노출 된 인터페이스의 디자인으로 이어집니다.

즉, 빠른 해결 방법으로 비즈니스 계층에 래퍼 클래스를 작성하는 것을 제안합니다. 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;
      }
   }
}

다른 팁

약간의 재건축이 필요하지만 세션 상태 사용에서 사용자 프로파일로 전환하면 클라이언트 응용 프로그램 서비스를 사용하여 정보를 공유 할 수 있습니다.

http://msdn.microsoft.com/en-us/library/bb384297.aspx

웹 서비스 나 편안한 서비스를 만들어야한다고 생각합니다. 서비스는 사용자 정보를 나타내는 XML 파일을 반환합니다. Windows 또는 웹 응용 프로그램에서 서비스 시들어를 호출 할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top