2012-08-13 4 views
3

2 개의 하위 프로젝트를 사용하는 응용 프로그램 아키텍처를 개발 중입니다. a) asp.net 웹 응용 프로그램 (사용자 인터페이스와 비즈니스 논리를 다룹니다) 및 b) 클래스 라이브러리. (데이터 액세스 계층을 다룹니다)클래스 라이브러리의 세션에 액세스하십시오.

시스템 사용자가 성공적으로 로그인하면 사용자 정보가 세션 개체에 저장됩니다.

내가 직면하는 문제는 클래스 라이브러리 프로젝트 (데이터 액세스 계층)에서 해당 세션 개체에 액세스하려고 할 때 항상 null을 반환합니다.

내 경우에 각 사용자가 보안상의 이유로 데이터베이스 액세스를위한 사용자 이름과 암호를 가지고 있기 때문에 클래스 라이브러리 프로젝트에서 세션 객체에 액세스해야합니다.

그래서, 어떻게 어떻게하면 내가 읽고 클래스 라이브러리 프로젝트

+2

당신은 할 수 없습니다. 유일한 방법은 웹 프로젝트를 통해 클래스 라이브러리의 특정 메소드를 호출하고 그 메소드에 session 값을 전달하는 것입니다. – yogi

+2

이 앱에 많은 사용자가있는 경우 각 사용자에 대해 데이터베이스 로그인을 재고해야합니다. 이 방법으로 연결 풀링을 해제합니다. –

+0

나는 똑같은 문제에 직면 해있다. 어떤 해결책을 찾았 니, Bikash? – Akbari

답변

5

사용 System.Web.HttpContext.Current.Session 객체에 세션 객체에 /에서 쓰기 않습니다.

+3

세션 개체에 대한 참조 만 제공합니다. sesion 개체 값은 항상 null입니다. –

+0

현재 세션 값은 여기에서 가져 오지 마십시오. U는 참조 만받습니다. –

5

우선 Peri가 올바르게 인식 했으므로 연결 풀링이 느슨하기 때문에 (각 사용자가 기존 연결을 다시 사용할 수 없기 때문에 각 사용자에 대해 별도의 데이터베이스 로그인을하는 것이 좋습니다) 다시 생각해 봐야합니다. 새로운 SQL 연결을 만드는 것은 꽤 비쌉니다.)

public interface ILoginDataService 
{ 
    LoginData Current { get; } 
} 

을 그리고 구현 세션에서 로그인 데이터를 전달하는 것입니다 : 당신이 정말로 별도의 데이터베이스 사용자를 유지하려면

, 나는 데이터 액세스에서 추상적 인 세션 인터페이스를 만들 것입니다. 그런 식으로 데이터 액세스 논리에서 세션에 대한 세션 종속성을 가지지 않으므로 더 많은 테스트가 가능하며 걱정을 분리 할 수 ​​있습니다.

+0

나는 모든 클라이언트 ID를 가진 모든 테이블에있는 다중 클라이언트 데이터베이스를 가지고 있으므로 모든 쿼리를 ClientID로 필터링해야하므로 이런 식으로 작업하려고합니다. 어떻게 모든 메소드 호출에서이 인터페이스를 전달할 필요가없는 방식으로이 인터페이스를 사용할 수 있습니까? – Marlon

+0

일반적으로 의존성 주입 컨테이너가이 용도로 사용됩니다. – Giedrius

2

다음은 세션 정보를 얻기 위해 라이브러리에서 사용한 코드입니다.

public static string Entity() 
{ 
    string entity = ""; 
    HttpContext httpContext = HttpContext.Current; 
    if (httpContext.ApplicationInstance.Session.Count > 0) 
     entity = httpContext.ApplicationInstance.Session["EntityCode"].ToString(); 

    return entity; 
} 
+0

나에게 적합 +1 – Zafar

관련 문제