2009-12-03 12 views
8

Tenemos una aplicación asp.net MVC utilizando Fluent Nhibernate que se ejecuta en IIS7 & Windows Sever 2008. Frecuentemente (aunque hasta ahora tenemos que consistentemente reproducirlo) después de una acumulación obtenemos una pantalla amarilla de la muerte con esta excepción:IIS7 + NHibernate: operación ilegal intentada en una clave de registro que se ha marcado para eliminación

[COMException (0x800703fa): Illegal operation attempted on a registry key that has been marked for deletion. (Exception from HRESULT: 0x800703FA)] 
    System.Reflection.Assembly._nDefineDynamicModule(Assembly containingAssembly, Boolean emitSymbolInfo, String filename, StackCrawlMark& stackMark) +0 
    System.Reflection.Emit.AssemblyBuilder.DefineDynamicModuleInternalNoLock(String name, Boolean emitSymbolInfo, StackCrawlMark& stackMark) +381 
    System.Reflection.Emit.AssemblyBuilder.DefineDynamicModuleInternal(String name, Boolean emitSymbolInfo, StackCrawlMark& stackMark) +105 
    System.Reflection.Emit.AssemblyBuilder.DefineDynamicModule(String name, Boolean emitSymbolInfo) +83 
    Castle.DynamicProxy.ModuleScope.CreateModule(Boolean signStrongName) +206 
    Castle.DynamicProxy.ModuleScope.ObtainDynamicModuleWithWeakName() +63 
    Castle.DynamicProxy.Generators.Emitters.ClassEmitter.CreateTypeBuilder(ModuleScope modulescope, String name, Type baseType, Type[] interfaces, TypeAttributes flags, Boolean forceUnsigned) +78 
    Castle.DynamicProxy.Generators.Emitters.ClassEmitter..ctor(ModuleScope modulescope, String name, Type baseType, Type[] interfaces, TypeAttributes flags, Boolean forceUnsigned) +69 
    Castle.DynamicProxy.Generators.Emitters.ClassEmitter..ctor(ModuleScope modulescope, String name, Type baseType, Type[] interfaces) +36 
    Castle.DynamicProxy.Generators.BaseProxyGenerator.BuildClassEmitter(String typeName, Type parentType, Type[] interfaces) +140 
    Castle.DynamicProxy.Generators.ClassProxyGenerator.GenerateCode(Type[] interfaces, ProxyGenerationOptions options) +648 
    Castle.DynamicProxy.ProxyGenerator.CreateClassProxy(Type classToProxy, Type[] additionalInterfacesToProxy, ProxyGenerationOptions options, Object[] constructorArguments, IInterceptor[] interceptors) +139 
    Castle.DynamicProxy.ProxyGenerator.CreateClassProxy(Type classToProxy, Type[] additionalInterfacesToProxy, IInterceptor[] interceptors) +39 
    NHibernate.ByteCode.Castle.ProxyFactory.GetProxy(Object id, ISessionImplementor session) +416 

[HibernateException: Creating a proxy instance failed] 
    NHibernate.ByteCode.Castle.ProxyFactory.GetProxy(Object id, ISessionImplementor session) +642 
    NHibernate.Tuple.Entity.AbstractEntityTuplizer.CreateProxy(Object id, ISessionImplementor session) +49 
    NHibernate.Persister.Entity.AbstractEntityPersister.CreateProxy(Object id, ISessionImplementor session) +102 
    NHibernate.Event.Default.DefaultLoadEventListener.CreateProxyIfNecessary(LoadEvent event, IEntityPersister persister, EntityKey keyToLoad, LoadType options, IPersistenceContext persistenceContext) +255 
    NHibernate.Event.Default.DefaultLoadEventListener.ProxyOrLoad(LoadEvent event, IEntityPersister persister, EntityKey keyToLoad, LoadType options) +400 
    NHibernate.Event.Default.DefaultLoadEventListener.OnLoad(LoadEvent event, LoadType loadType) +923 
    NHibernate.Impl.SessionImpl.FireLoad(LoadEvent event, LoadType loadType) +169 
    NHibernate.Impl.SessionImpl.InternalLoad(String entityName, Object id, Boolean eager, Boolean isNullable) +310 
    NHibernate.Type.EntityType.ResolveIdentifier(Object id, ISessionImplementor session) +211 
    NHibernate.Engine.TwoPhaseLoad.InitializeEntity(Object entity, Boolean readOnly, ISessionImplementor session, PreLoadEvent preLoadEvent, PostLoadEvent postLoadEvent) +527 
    NHibernate.Loader.Loader.InitializeEntitiesAndCollections(IList hydratedObjects, Object resultSetId, ISessionImplementor session, Boolean readOnly) +544 
    NHibernate.Loader.Loader.DoQuery(ISessionImplementor session, QueryParameters queryParameters, Boolean returnProxies) +1158 
    NHibernate.Loader.Loader.DoQueryAndInitializeNonLazyCollections(ISessionImplementor session, QueryParameters queryParameters, Boolean returnProxies) +105 
    NHibernate.Loader.Loader.LoadEntity(ISessionImplementor session, Object id, IType identifierType, Object optionalObject, String optionalEntityName, Object optionalIdentifier, IEntityPersister persister) +472 
    NHibernate.Loader.Entity.AbstractEntityLoader.Load(ISessionImplementor session, Object id, Object optionalObject, Object optionalId) +77 
    NHibernate.Loader.Entity.AbstractEntityLoader.Load(Object id, Object optionalObject, ISessionImplementor session) +30 
    NHibernate.Persister.Entity.AbstractEntityPersister.Load(Object id, Object optionalObject, LockMode lockMode, ISessionImplementor session) +182 
    NHibernate.Event.Default.DefaultLoadEventListener.LoadFromDatasource(LoadEvent event, IEntityPersister persister, EntityKey keyToLoad, LoadType options) +174 
    NHibernate.Event.Default.DefaultLoadEventListener.Load(LoadEvent event, IEntityPersister persister, EntityKey keyToLoad, LoadType options) +194 
    NHibernate.Event.Default.DefaultLoadEventListener.OnLoad(LoadEvent event, LoadType loadType) +923 
    NHibernate.Impl.SessionImpl.FireLoad(LoadEvent event, LoadType loadType) +169 
    NHibernate.Impl.SessionImpl.Get(String entityName, Object id) +191 
    NHibernate.Impl.SessionImpl.Get(Type entityClass, Object id) +139 
    NHibernate.Impl.SessionImpl.Get(Object id) +136 
    Huddle.DataAccess.Persistence.Repository`1.FindById(Int32 id) +281 
    Huddle.WebSite.Global.GetWorkspace() +241 
    Huddle.WebSite.Global.Application_BeginRequest(Object sender, EventArgs e) +437 
    System.Web.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +80 
    System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +171 

parece algunas otras people han encontrado el mismo problema aunque nadie parece tener una solución, alguna idea?

+0

@@ James Hollingworth ¿Usted ha intentado establecer diferentes identidad para un grupo de aplicaciones en IIS para este problema? –

Respuesta

3

Esto parece un error en el propio framework .NET.

Observe que el innermost method being called, no especifica que puede lanzar una ComException.

Sugeriría actualizar a la versión más reciente de Castle Dynamic Proxy (2.2 beta) para ver si el problema persiste.

Si lo hace, puede intentar usar uno de los otros proveedores de proxy.

Y también informar de este problema a Microsoft Connect

7

Esto suena como algo que he visto con COM + y MSMQ en Windows 2008. Lo que pasa es que Windows 2008 se descarga la sección del Registro de usuario tan pronto como el usuario ha iniciado sesión apagado, independientemente de cualquier manija abierta restante. Debería ver las entradas en el registro de eventos que la colmena se descargó con procesos que aún la usan.

Hay un GPO que se puede configurar para evitar que esto suceda (DisableForceUnload)

Más información aquí:

http://blogs.msdn.com/distributedservices/archive/2009/11/06/a-com-server-application-may-stop-working-on-windows-server-2008.aspx

Cuestiones relacionadas