우리는 Dependency Injection을 위해 Spring.NET을 사용하고 ORM은 NHibernate를 사용하고 있습니다. 우리는 Session Per Request Model을 사용하고 세션은 Spring.NET을 사용하여 생성됩니다. 이 페이지 중 하나에서 웹 서비스 호출이 있습니다. 웹 서비스 호출이 EndPointNotFoundException 예외를 던지면 NH 세션이 닫히고 '지연 초기화 : 예외'가 게으른 초기화 역할을하지 못했습니다. 세션이나 세션이 닫히지 않았습니다. (우리는 Person 객체가로드되어로드됩니다. 페이지로드하지만 Person 객체에는 주소 등의 지연로드 된 콜렉션 세트가 있습니다. 지연로드 된 콜렉션 중 하나가 액세스 될 때 오류가 발생합니다. 예외가 throw되지 않으면 모든 것이 올바르게 작동합니다. 빠른 해결책이 있습니까?EndPointNotFoundException이 발생하면 NHibernate 세션 (요청 당 세션)이 종료 됨 WCF 호출 예외가 발생했습니다. 어떻게 해결할 수 있습니까?
1
A
답변
0
더 많은 정보가 필요하지만 난 계산 된 추측을하려고합니다 :
던져 예외가 처리되지 않거나 처리가 다시 발생하는 경우. 예외가 페이지 오류 처리기로 전파됩니다.
어쨌든 어딘가에서 예외 핸들러가 ISession.Close()
를 호출하고 예외를 소비 (및 프로그램 실행 페이지의 렌더링을 통해 계속) 예외 거품 파이프 라인을 따라
이되지 드문 일반적으로 롤백을 수행 할 때입니다 거래는 ISession
도 닫는 것이 좋습니다.
실패한 커밋에서 롤백 + 닫기가 수행 될 수 있습니다. 실패한 웹 서비스 호출은 어떻게 든 개체 상태를 오염 시키므로 커밋이 실패합니다. 다시 예외는 처리되고 소비됩니다.
핵심적으로 껄끄 러운 세부 사항은 여전히 프록시 NHibernate에 엔티티를 포함 일부 코드 경로가 실행 얻고 참조하려고한다는 것이다 북반구 세션은 웹 서비스 오류에 닫히지 않는 이유는
ISession
을 폐쇄? –:) 그게 내가 알아 내려고하는 것입니다. 예외가 throw되면 'no session 또는 session was closed'오류가 발생합니다. – RAM
빠른 해결책은 "뷰에서 쿼리하지 말 것"이며 필요한 개체를 DB 레이어에 열렬하게로드하는 것입니다. http://nhprof.com/learn/alerts/QueriesFromViews – Andreas