2009-12-03 10 views
8

Abbiamo un'app MVC asp.net che utilizza Fluent Nhibernate in esecuzione su IIS7 & Windows Sever 2008. Frequently (anche se finora non abbiamo ancora costantemente riprodurlo) dopo un accumulo otteniamo uno schermo giallo della morte con questa eccezione:IIS7 + NHibernate: operazione non valida tentata su una chiave del Registro di sistema contrassegnata per la cancellazione

[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 

sembra pochi altri people hanno trovato lo stesso problema anche se nessuno sembra avere una soluzione, tutte le idee?

+0

@@ James Hollingworth Hai provato impostazione diversa identità per un pool di applicazioni in IIS per questo problema? –

risposta

3

Questo sembra un bug nello stesso framework .NET.

Si noti che il innermost method being called, non specifica che può generare una ComException.

Vorrei suggerire l'aggiornamento alla versione più recente di Castle Dynamic Proxy (2.2 beta) per vedere se il problema persiste.

Se è possibile provare a utilizzare uno degli altri provider di proxy.

E anche segnalare questo problema a Microsoft Connect

7

questo suona come qualcosa che ho visto con COM + e MSMQ su Windows 2008. Quello che succede è che Windows 2008 scarica il hive del Registro utente non appena l'utente è collegato disattivato, indipendentemente dalle maniglie aperte rimanenti. Dovresti vedere le voci nel registro eventi che l'hive è stato scaricato con i processi ancora in uso.

C'è un GPO che può essere impostato per evitare che ciò accada (DisableForceUnload)

Maggiori informazioni qui:

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

Problemi correlati