Jason, thanks again for your quick answer! All of component who injects session are transient. The only thing that I can guess is "MembershipProvider" in ASP .NET MVC. I cannot register it as a component. and since I user one of my services in my costumized provider I should register this one as a transient component too but I cannot do.
Is it true? what can I use instead of OoTB "Membership Provider" in ASP .NET MVC 1.0? /Sheri On 26 Jan, 22:32, Jason Meckley <[email protected]> wrote: > if you are injecting the session into a service, the service must be > Transient, also with objects that utilize these service must be > transient. here are some examples > > controller > dao > session. all must be transient > controller > service > > dao > session. controller and dao must be transient, > service can be a singleton, if necessary. > > by default component lifestyles are "undefined" which defaults to > singletons. > > On Jan 26, 3:54 pm, Sheri <[email protected]> wrote: > > > > > ______________________ > > By the way the error message is (sorry for swedish language in the > > message): > > > System.ObjectDisposedException was unhandled by user code > > Message="Session is closed!\r\nObjektnamn: ISession." > > Source="NHibernate" > > ObjectName="ISession" > > StackTrace: > > vid NHibernate.Impl.AbstractSessionImpl.ErrorIfClosed() > > vid > > NHibernate.Impl.AbstractSessionImpl.CheckAndUpdateSessionStatus() > > vid NHibernate.Impl.SessionImpl.CreateCriteria(Type > > persistentClass, String alias) > > vid > > WebMonitorUpdate.Models.NHDataAccessObjects.OnlineSystemDAO.findByUsername > > (String username) i C:\Projects\WebMonitorUpdate\WebMonitorUpdate > > \Models\NHDataAccessObjects\OnlineSystemDAO.cs:rad 55 > > vid > > WebMonitorUpdate.SQLServerServices.OnlineSystemService.getCustomerInfoByNam > > e > > (String username) i C:\Projects\WebMonitorUpdate\WebMonitorUpdate > > \SQLServerServices\OnlineSystemService.cs:rad 33 > > vid > > WebMonitorUpdate.MembershipServicesImpl.SQLServerMembershipProvider.Validat > > eUser > > (String usernameAndSystemId, String password) i C:\Projects > > \WebMonitorUpdate\WebMonitorUpdate\MembershipServicesImpl > > \SQLServerMembershipProvider.cs:rad 139 > > vid > > WebMonitorUpdate.MembershipServicesImpl.AccountMembershipService.ValidateUs > > er > > (String systemId, String userName, String password) i C:\Projects > > \WebMonitorUpdate\WebMonitorUpdate\MembershipServicesImpl > > \AccountMembershipService.cs:rad 32 > > vid WebMonitorUpdate.Validators.AccountValidators.ValidateLogOn > > (String systemId, String userName, String password, IMembershipService > > membershipService, ModelStateDictionary modelState) i C:\Projects > > \WebMonitorUpdate\WebMonitorUpdate\Validators\AccountValidators.cs:rad > > 50 > > vid WebMonitorUpdate.Controllers.AccountController.LogOn(String > > systemId, String userName, String password, Boolean rememberMe, String > > returnUrl) i C:\Projects\WebMonitorUpdate\WebMonitorUpdate\Controllers > > \AccountController.cs:rad 70 > > vid lambda_method(ExecutionScope , ControllerBase , Object[] ) > > vid System.Web.Mvc.ActionMethodDispatcher.Execute > > (ControllerBase controller, Object[] parameters) > > vid System.Web.Mvc.ReflectedActionDescriptor.Execute > > (ControllerContext controllerContext, IDictionary`2 parameters) > > vid System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod > > (ControllerContext controllerContext, ActionDescriptor > > actionDescriptor, IDictionary`2 parameters) > > vid > > System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClassa.<InvokeActionMeth > > odWithFilters>b__7 > > () > > vid > > System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter > > (IActionFilter filter, ActionExecutingContext preContext, Func`1 > > continuation) > > vid > > System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClassa.<>c__DisplayClass > > c.<InvokeActionMethodWithFilters>b__9 > > () > > vid > > System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodWithFilters > > (ControllerContext controllerContext, IList`1 filters, > > ActionDescriptor actionDescriptor, IDictionary`2 parameters) > > vid System.Web.Mvc.ControllerActionInvoker.InvokeAction > > (ControllerContext controllerContext, String actionName) > > vid System.Web.Mvc.Controller.ExecuteCore() > > vid System.Web.Mvc.ControllerBase.Execute(RequestContext > > requestContext) > > vid > > System.Web.Mvc.ControllerBase.System.Web.Mvc.IController.Execute > > (RequestContext requestContext) > > vid System.Web.Mvc.MvcHandler.ProcessRequest(HttpContextBase > > httpContext) > > vid System.Web.Mvc.MvcHandler.ProcessRequest(HttpContext > > httpContext) > > vid > > System.Web.Mvc.MvcHandler.System.Web.IHttpHandler.ProcessRequest > > (HttpContext httpContext) > > vid System.Web.Mvc.MvcHttpHandler.VerifyAndProcessRequest > > (IHttpHandler httpHandler, HttpContextBase httpContext) > > vid System.Web.Routing.UrlRoutingHandler.ProcessRequest > > (HttpContextBase httpContext) > > vid System.Web.Routing.UrlRoutingHandler.ProcessRequest > > (HttpContext httpContext) > > vid > > System.Web.Routing.UrlRoutingHandler.System.Web.IHttpHandler.ProcessRequest > > (HttpContext context) > > vid WebMonitorUpdate._Default.Page_Load(Object sender, > > EventArgs e) i C:\Projects\WebMonitorUpdate\WebMonitorUpdate > > \Default.aspx.cs:rad 18 > > vid System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr > > fp, Object o, Object t, EventArgs e) > > vid System.Web.Util.CalliEventHandlerDelegateProxy.Callback > > (Object sender, EventArgs e) > > vid System.Web.UI.Control.OnLoad(EventArgs e) > > vid System.Web.UI.Control.LoadRecursive() > > vid System.Web.UI.Page.ProcessRequestMain(Boolean > > includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) > > InnerException: > > > ______________________ > > > On 26 Jan, 21:41, Sheri <[email protected]> wrote: > > > > Thanks a lot Jason for you help. > > > Sorry for my disturbance. > > > > ((just a point to them who would like to use NH 2.1.2.4000 and latest > > > Castle versions, NHibernate.ByteCode.Castle source code should be > > > built by the latest version of Castle.Core and Castle.DynamicProxy2.)) > > > > I use IHttpModule to open/close session but I get "Session Closed" > > > error. > > > > 1. web.config: I have current_session_context_class = web & <add > > > name="SessionScope" type="MyPackage.Helper.SessionScope, MyPackage"/> > > > in my httpModule section > > > 2. I have a daoFactory which is registered in container. this > > > daoFactory initialize all my DAOs. (But I do not have registered my > > > dao in the container directly. DAO classes are for CRUD operation) > > > 3. I have some services classes which has some dao as object for other > > > process with retrieved data from DAOs. In these services classes I > > > have initialized each dao through daofactory > > > 4. All my daos is inserted in castle section of web.config > > > > I do not know why I get "session closed error". The only thing I can > > > guess is registration in container which I have some trouble to > > > understand. > > > SessionScope (that implements IHttpModule) should retrieve and close > > > session byself? or? > > > > Thanks for any help > > > > Regards > > > Sheri > > > > On 25 Jan, 14:49, Jason Meckley <[email protected]> wrote: > > > > > Sheri, this has been my approach with registering NH in Windsor. > > > > > public NhibernateFacility : AbstractFacility > > > > { > > > > public override void Init() > > > > { > > > > var configuration = new Configuration().Configure(); > > > > var factory = configuration.BuildSessionFactory(); > > > > Kernel.AddComponentInstance("nhibernate_configuration", > > > > configuration); > > > > Kernel.AddComponentInstance("session_factory", ); > > > > Kernel.Resolvers.Add(NhibernateSessionResolver(Kernel)); > > > > //I could also use the factory method to resolve the > > > > session, but > > > > that can cause a memory leak if i don't also implement > > > > //a custom lifecyle for it. It's easier just to resolve > > > > the session > > > > with sub dependency resolver. > > > > //It's also easier to test in isolation. > > > > } > > > > > } > > > > > public NhibernateSessionResolver : ISubDependencyResolver > > > > { > > > > private readonly IKernel kernel; > > > > > public NhibernateSessionResolver(IKernel kernel) > > > > { > > > > this.kernel = kernel; > > > > } > > > > > public bool Resolve(CreationContext context, > > > > ISubDependencyResolver > > > > contextHandlerResolver, ComponentModel model, DependencyModel > > > > dependency) > > > > { > > > > return > > > > kernel.Resolve<ISessionFactory>().GetCurrentSession(); > > > > } > > > > > public bool CanResolve(CreationContext context, > > > > ISubDependencyResolver contextHandlerResolver, ComponentModel model, > > > > DependencyModel dependency) > > > > { > > > > return > > > > typeof(ISession).IsAssignableFrom(dependency.TargetType); > > > > } > > > > > } > > > > > new Configuration().Configure() will automatically load the > > > > hibernate.config file from the root directory of the project. part of > > > > this configuration will be a property defining the > > > > CurrentSessionContext web, thread, map, etc. the best choice for this > > > > will depend on where you are using this configuration. With this is > > > > place I can now inject a session into other objects. > > > > > public class Foo > > > > { > > > > private readonly ISession session; > > > > > public Foo(ISession session) > > > > { > > > > this.session = session; > > > > }} > > > > > I can then register Foo into the container as well with a transient > > > > lifestyle and all will be resolved for me automatically. > > > > > The next piece to consider is managing when to open/close the session. > > > > I work with web applications and use an HttpModule to manage the > > > > session. > > > > public class SessionScope : IHttpModule > > > > { > > > > public void Init(HttpApplication context) > > > > { > > > > context.BeginRequest... > > läs mer » -- You received this message because you are subscribed to the Google Groups "nhusers" group. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/nhusers?hl=en.
