Je migre mon application web mvc pour utiliser Nhibernate Facility pour gérer Sessions Nhibernate.Château Windsor Nhibernate Installation chargement paresseux
Je rencontre ce problème étrange;
Lorsque j'enregistrer SessionWebModule sous web.config/httpModules via:
<add name="NHibernateSessionWebModule"
type="Castle.Facilities.NHibernateIntegration.Components.Web.SessionWebModule,
Castle.Facilities.NHibernateIntegration" />
système est incapable d'objets de charge paresseux. Je n'ai pas d'exception de session. Si je ne l'ajoute pas à web.config, le chargement paresseux fonctionne correctement. Tout part de ceci semble être OK dans la mesure où regiter le conteneur Windsor et l'enregistrement de Nhibernate Facility va. Nhibernate La fonction est capable de fournir le gestionnaire de session et le conteneur Windsor est capable de résoudre les objets.
Bien sûr, sans SessionWebModule Nhibernate Facility est presque inutile pour moi comme dans cette situation, il n'est pas en mesure de gérer correctement sessions. Je vois datareader est déjà des exceptions de type ouvert qui sont pas bon ..
Je suis coincé et dois d'urgence obtenir passé ce problème, je vais apprécier toute aide de votre part.
J'inclus ci-dessous quelques sections de ma configuration et le code à donner plus d'informations
Web.config:
<castle>
<facilities>
<facility id="nhibernatefacility" isWeb="false"
type="Castle.Facilities.NHibernateIntegration.NHibernateFacility,
Castle.Facilities.NHibernateIntegration">
<factory id="nhibernate.factory">
<settings>
<item
key="connection.provider">NHibernate.Connection.DriverConnectionProvider</
item>
<item
key="connection.driver_class">NHibernate.Driver.SqlClientDriver</item>
<item key="connection.connection_string">Data
Source=zzz;Database=xxx;Trusted_Connection=True;</item>
<item
key="dialect">NHibernate.Dialect.MsSql2005Dialect</item>
<item
key="proxyfactory.factory_class">NHibernate.ByteCode.LinFu.ProxyFactoryFactory,
NHibernate.ByteCode.LinFu</item>
</settings>
<assemblies>
<assembly>AppWeb.Domain</assembly>
</assemblies>
</factory>
</facility>
</facilities>
</castle>
<system.webServer>
<validation validateIntegratedModeConfiguration="false" />
<modules runAllManagedModulesForAllRequests="true">
<add name="NHibernateSessionWebModule"
type="Castle.Facilities.NHibernateIntegration.Components.Web.SessionWebModule,
Castle.Facilities.NHibernateIntegration" />
</modules>
</sytem.webServer>
Global.asax
public class MvcApplication : System.Web.HttpApplication,
IContainerAccessor
{
private static IWindsorContainer container;
public IWindsorContainer Container
{
get { return container; }
}
void Application_Error(Object sender, EventArgs e)
{
Logger.Error(Server.GetLastError());
}
public static void RegisterRoutes(RouteCollection routes)
{
#region Ignores
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.IgnoreRoute("admin/{*url}");
#endregion
routes.MapRoute(
"Default",
"{controller}/{action}/{id}",
new { controller = "Home", action = "Main", id = "" },
new { controller = @"[^\.]*" }
);
}
protected void Application_Start()
{
RegisterRoutes(RouteTable.Routes);
log4net.Config.XmlConfigurator.Configure();
SetupWindsor();
}
private void SetupWindsor()
{
container = new WindsorContainer(new XmlInterpreter());
container.Register(
AllTypes
.FromAssemblyContaining<UserRepository>()
.Where(t => t.Name.EndsWith("Repository",
StringComparison.Ordinal))
.WithService
.FirstInterfaceOnType()
.Configure(r =>
r.LifeStyle.PerWebRequest),
AllTypes.FromAssembly(Assembly.GetExecutingAssembly())
.BasedOn<IController>()
.Configure(c =>
c.LifeStyle.PerWebRequest),
);
//.AddFacility<TransactionFacility>();
ControllerBuilder.Current.SetControllerFactory(new
WindsorControllerFactory(container));
}
}
exception de chargement Lazy:
[LazyInitializationException: In itializing [AppWeb.Domain.City # 31135] - Impossible d 'initialiser proxy - aucune session] NHibernate.Proxy.AbstractLazyInitializer.Initialize() +138 NHibernate.Proxy.AbstractLazyInitializer.GetImplementation() +37 NHibernate.ByteCode.. LinFu.LazyInitializer.Intercept (InvocationInfo info) +72 CityProxy.get_Name() +143 ASP.views_tour_filters_ascx .__ Render__control1 (HtmlTextWriter __W, contrôle parameterContainer) dans c: \ wwwroot \ AppWeb \ AppWeb.Web \ Views \ tour \ Filters.ascx: 14 System.Web.UI.Control.RenderChildrenInternal (HtmlTextWriter writer, Enfants ICollection) +256 System.Web.UI.Control.RenderChildren (HtmlTextWriter writer) +19 System.Web.UI.Control.Render (écrivain HtmlTextWriter) 10 System.Web.UI.Control.RenderControlInternal (écrivain HtmlTextWriter, adaptateur ControlAdapter) +27 System.Web.UI.Control.RenderControl (HtmlTextWriter écrivain, adaptateur ControlAdapter) +99 System.Web.UI.Control.RenderControl (écrivain HtmlTextWriter) +25 System.Web.UI.Control.RenderChildrenInternal (écrivain HtmlTextWriter, enfants ICollection) +134 System.Web.UI .Control.RenderChildren (writer HtmlTextWriter) +19 System.Web.UI.Page.Render (writer HtmlTextWriter) +29 System.Web.Mvc.ViewPage.Rendu (HtmlTextWriter écrivain) +59 System.Web.UI.Control.RenderControlInternal (écrivain HtmlTextWriter, adaptateur ControlAdapter) +27 System.Web.UI.Control.RenderControl (écrivain HtmlTextWriter, adaptateur ControlAdapter) +99 système. Web.UI.Control.RenderControl (écrivain HtmlTextWriter) +25 de System.Web.UI.Page.ProcessRequestMain (Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1266
Im en utilisant « Nhibernate Facility » qui est censé gérer toute la gestion de la session ... – kaivalya
Peut-être, mais dans votre code, vous disposez de la session en utilisant explicitement « Utilisation ». –
Nhibernate Facility dispose d'un mécanisme de mise en cache qui met en cache les objets et les réutilise dans le même contexte. J'ai mis à jour ma question après avoir découvert que mon problème n'était pas lié aux instructions using. Le chargement paresseux échoue indépendamment des instructions using dès que j'inscris le SessionWebModule requis – kaivalya