2011-10-18 4 views
1

우리는 Dependency Injection을 위해 Spring.NET을 사용하고 ORM은 NHibernate를 사용하고 있습니다. 우리는 Session Per Request Model을 사용하고 세션은 Spring.NET을 사용하여 생성됩니다. 이 페이지 중 하나에서 웹 서비스 호출이 있습니다. 웹 서비스 호출이 EndPointNotFoundException 예외를 던지면 NH 세션이 닫히고 '지연 초기화 : 예외'가 게으른 초기화 역할을하지 못했습니다. 세션이나 세션이 닫히지 않았습니다. (우리는 Person 객체가로드되어로드됩니다. 페이지로드하지만 Person 객체에는 주소 등의 지연로드 된 콜렉션 세트가 있습니다. 지연로드 된 콜렉션 중 하나가 액세스 될 때 오류가 발생합니다. 예외가 throw되지 않으면 모든 것이 올바르게 작동합니다. 빠른 해결책이 있습니까?EndPointNotFoundException이 발생하면 NHibernate 세션 (요청 당 세션)이 종료 됨 WCF 호출 예외가 발생했습니다. 어떻게 해결할 수 있습니까?

+0

ISession을 폐쇄? –

+0

:) 그게 내가 알아 내려고하는 것입니다. 예외가 throw되면 'no session 또는 session was closed'오류가 발생합니다. – RAM

+0

빠른 해결책은 "뷰에서 쿼리하지 말 것"이며 필요한 개체를 DB 레이어에 열렬하게로드하는 것입니다. http://nhprof.com/learn/alerts/QueriesFromViews – Andreas

답변

0

더 많은 정보가 필요하지만 난 계산 된 추측을하려고합니다 :

던져 예외가 처리되지 않거나 처리가 다시 발생하는 경우. 예외가 페이지 오류 처리기로 전파됩니다.

어쨌든 어딘가에서 예외 핸들러가 ISession.Close()를 호출하고 예외를 소비 (및 프로그램 실행 페이지의 렌더링을 통해 계속) 예외 거품 파이프 라인을 따라

이되지 드문 일반적으로 롤백을 수행 할 때입니다 거래는 ISession도 닫는 것이 좋습니다.

실패한 커밋에서 롤백 + 닫기가 수행 될 수 있습니다. 실패한 웹 서비스 호출은 어떻게 든 개체 상태를 오염 시키므로 커밋이 실패합니다. 다시 예외는 처리되고 소비됩니다.

핵심적으로 껄끄 러운 세부 사항은 여전히 ​​프록시 NHibernate에 엔티티를 포함 일부 코드 경로가 실행 얻고 참조하려고한다는 것이다 북반구 세션은 웹 서비스 오류에 닫히지 않는 이유는