Quizas esto te pueda servir,

http://nhforge.org/wikis/howtonh/run-in-medium-trust.aspx

Saludos,

2010/8/27 Mario Dal Lago <[email protected]>

> hola, tengo una aplicacion en un hosting llamado Dattatec, la aplicacion
> andaba sin problemas, hasta el otro dia donde empeze a recibir esta
> excepcion de NH.
>
> *Unable to obtain public key for StrongNameKeyPair.*
>
> [ArgumentException: Unable to obtain public key for StrongNameKeyPair.]
>    System.Reflection.StrongNameKeyPair.nGetPublicKey(Boolean exported,
> Byte[] array, String container) +0
>    System.Reflection.StrongNameKeyPair.get_PublicKey() +30
>    System.AppDomain.InternalDefineDynamicAssembly(AssemblyName name,
> AssemblyBuilderAccess access, String dir, Evidence evidence, PermissionSet
> requiredPermissions, PermissionSet optionalPermissions, PermissionSet
> refusedPermissions, StackCrawlMark& stackMark, IEnumerable`1
> unsafeAssemblyAttributes) +595
>    System.AppDomain.DefineDynamicAssembly(AssemblyName name,
> AssemblyBuilderAccess access) +39
>    Castle.DynamicProxy.ModuleScope.CreateModule(Boolean signStrongName)
> +282
>    Castle.DynamicProxy.ModuleScope.ObtainDynamicModuleWithStrongName() +125
>    Castle.DynamicProxy.ModuleScope.ObtainDynamicModule(Boolean
> isStrongNamed) +68
>
> Castle.DynamicProxy.Generators.Emitters.ClassEmitter.CreateTypeBuilder(ModuleScope
> modulescope, String name, Type baseType, IEnumerable`1 interfaces,
> TypeAttributes flags, Boolean forceUnsigned) +103
>    Castle.DynamicProxy.Generators.Emitters.ClassEmitter..ctor(ModuleScope
> modulescope, String name, Type baseType, IEnumerable`1 interfaces,
> TypeAttributes flags, Boolean forceUnsigned) +98
>    Castle.DynamicProxy.Generators.Emitters.ClassEmitter..ctor(ModuleScope
> modulescope, String name, Type baseType, IEnumerable`1 interfaces) +98
>
> Castle.DynamicProxy.Generators.InvocationTypeGenerator.GetEmitter(ClassEmitter
> class, Type[] interfaces, INamingScope namingScope, MethodInfo methodInfo)
> +203
>
> Castle.DynamicProxy.Generators.InvocationTypeGenerator.Generate(ClassEmitter
> class, ProxyGenerationOptions options, INamingScope namingScope) +234
>
> Castle.DynamicProxy.Contributors.ClassProxyTargetContributor.BuildInvocationType(MetaMethod
> method, ClassEmitter class, ProxyGenerationOptions options) +303
>
> Castle.DynamicProxy.Contributors.ClassProxyTargetContributor.GetInvocationType(MetaMethod
> method, ClassEmitter class, ProxyGenerationOptions options) +49
>
> Castle.DynamicProxy.Contributors.ClassProxyTargetContributor.GetMethodGenerator(MetaMethod
> method, ClassEmitter class, ProxyGenerationOptions options,
> CreateMethodDelegate createMethod) +196
>
> Castle.DynamicProxy.Contributors.CompositeTypeContributor.ImplementMethod(MetaMethod
> method, ClassEmitter class, ProxyGenerationOptions options,
> CreateMethodDelegate createMethod) +98
>
> Castle.DynamicProxy.Contributors.CompositeTypeContributor.Generate(ClassEmitter
> class, ProxyGenerationOptions options) +212
>    Castle.DynamicProxy.Generators.ClassProxyGenerator.GenerateType(String
> name, Type[] interfaces, INamingScope namingScope) +633
>    Castle.DynamicProxy.Generators.ClassProxyGenerator.GenerateCode(Type[]
> interfaces, ProxyGenerationOptions options) +1132
>    Castle.DynamicProxy.DefaultProxyBuilder.CreateClassProxyType(Type
> classToProxy, Type[] additionalInterfacesToProxy, ProxyGenerationOptions
> options) +151
>    Castle.DynamicProxy.ProxyGenerator.CreateClassProxyType(Type
> classToProxy, Type[] additionalInterfacesToProxy, ProxyGenerationOptions
> options) +61
>    Castle.DynamicProxy.ProxyGenerator.CreateClassProxy(Type classToProxy,
> Type[] additionalInterfacesToProxy, ProxyGenerationOptions options, Object[]
> constructorArguments, IInterceptor[] interceptors) +329
>    Castle.DynamicProxy.ProxyGenerator.CreateClassProxy(Type classToProxy,
> Type[] additionalInterfacesToProxy, ProxyGenerationOptions options,
> IInterceptor[] interceptors) +54
>    Castle.DynamicProxy.ProxyGenerator.CreateClassProxy(Type classToProxy,
> Type[] additionalInterfacesToProxy, IInterceptor[] interceptors) +55
>    NHibernate.ByteCode.Castle.ProxyFactory.GetProxy(Object id,
> ISessionImplementor session) in
> c:\CSharp\NH\nhibernate\src\NHibernate.ByteCode.Castle\ProxyFactory.cs:32
>
> [HibernateException: Creating a proxy instance failed]
>    NHibernate.ByteCode.Castle.ProxyFactory.GetProxy(Object id,
> ISessionImplementor session) in
> c:\CSharp\NH\nhibernate\src\NHibernate.ByteCode.Castle\ProxyFactory.cs:43
>    NHibernate.Tuple.Entity.AbstractEntityTuplizer.CreateProxy(Object id,
> ISessionImplementor session) in
> c:\CSharp\NH\nhibernate\src\NHibernate\Tuple\Entity\AbstractEntityTuplizer.cs:236
>    NHibernate.Persister.Entity.AbstractEntityPersister.CreateProxy(Object
> id, ISessionImplementor session) in
> c:\CSharp\NH\nhibernate\src\NHibernate\Persister\Entity\AbstractEntityPersister.cs:3750
>
> NHibernate.Event.Default.DefaultLoadEventListener.CreateProxyIfNecessary(LoadEvent
> event, IEntityPersister persister, EntityKey keyToLoad, LoadType options,
> IPersistenceContext persistenceContext) in
> c:\CSharp\NH\nhibernate\src\NHibernate\Event\Default\DefaultLoadEventListener.cs:223
>    NHibernate.Event.Default.DefaultLoadEventListener.ProxyOrLoad(LoadEvent
> event, IEntityPersister persister, EntityKey keyToLoad, LoadType options) in
> c:\CSharp\NH\nhibernate\src\NHibernate\Event\Default\DefaultLoadEventListener.cs:154
>    NHibernate.Event.Default.DefaultLoadEventListener.OnLoad(LoadEvent
> event, LoadType loadType) in
> c:\CSharp\NH\nhibernate\src\NHibernate\Event\Default\DefaultLoadEventListener.cs:86
>    NHibernate.Impl.SessionImpl.FireLoad(LoadEvent event, LoadType loadType)
> in c:\CSharp\NH\nhibernate\src\NHibernate\Impl\SessionImpl.cs:2554
>    NHibernate.Impl.SessionImpl.InternalLoad(String entityName, Object id,
> Boolean eager, Boolean isNullable) in
> c:\CSharp\NH\nhibernate\src\NHibernate\Impl\SessionImpl.cs:1427
>    NHibernate.Type.EntityType.ResolveIdentifier(Object id,
> ISessionImplementor session) in
> c:\CSharp\NH\nhibernate\src\NHibernate\Type\EntityType.cs:386
>    NHibernate.Type.EntityType.ResolveIdentifier(Object value,
> ISessionImplementor session, Object owner) in
> c:\CSharp\NH\nhibernate\src\NHibernate\Type\EntityType.cs:424
>    NHibernate.Engine.TwoPhaseLoad.InitializeEntity(Object entity, Boolean
> readOnly, ISessionImplementor session, PreLoadEvent preLoadEvent,
> PostLoadEvent postLoadEvent) in
> c:\CSharp\NH\nhibernate\src\NHibernate\Engine\TwoPhaseLoad.cs:78
>    NHibernate.Loader.Loader.InitializeEntitiesAndCollections(IList
> hydratedObjects, Object resultSetId, ISessionImplementor session, Boolean
> readOnly) in c:\CSharp\NH\nhibernate\src\NHibernate\Loader\Loader.cs:592
>    NHibernate.Loader.Loader.DoQuery(ISessionImplementor session,
> QueryParameters queryParameters, Boolean returnProxies) in
> c:\CSharp\NH\nhibernate\src\NHibernate\Loader\Loader.cs:460
>
> NHibernate.Loader.Loader.DoQueryAndInitializeNonLazyCollections(ISessionImplementor
> session, QueryParameters queryParameters, Boolean returnProxies) in
> c:\CSharp\NH\nhibernate\src\NHibernate\Loader\Loader.cs:236
>    NHibernate.Loader.Loader.LoadCollection(ISessionImplementor session,
> Object id, IType type) in
> c:\CSharp\NH\nhibernate\src\NHibernate\Loader\Loader.cs:1473
>    NHibernate.Loader.Collection.CollectionLoader.Initialize(Object id,
> ISessionImplementor session) in
> c:\CSharp\NH\nhibernate\src\NHibernate\Loader\Collection\CollectionLoader.cs:35
>
> NHibernate.Persister.Collection.AbstractCollectionPersister.Initialize(Object
> key, ISessionImplementor session) in
> c:\CSharp\NH\nhibernate\src\NHibernate\Persister\Collection\AbstractCollectionPersister.cs:579
>
> NHibernate.Event.Default.DefaultInitializeCollectionEventListener.OnInitializeCollection(InitializeCollectionEvent
> event) in
> c:\CSharp\NH\nhibernate\src\NHibernate\Event\Default\DefaultInitializeCollectionEventListener.cs:51
>    NHibernate.Impl.SessionImpl.InitializeCollection(IPersistentCollection
> collection, Boolean writing) in
> c:\CSharp\NH\nhibernate\src\NHibernate\Impl\SessionImpl.cs:1639
>    NHibernate.Collection.AbstractPersistentCollection.Initialize(Boolean
> writing) in
> c:\CSharp\NH\nhibernate\src\NHibernate\Collection\AbstractPersistentCollection.cs:463
>    NHibernate.Collection.AbstractPersistentCollection.Read() in
> c:\CSharp\NH\nhibernate\src\NHibernate\Collection\AbstractPersistentCollection.cs:262
>
> NHibernate.Collection.Generic.PersistentGenericSet`1.System.Collections.Generic.IEnumerable<T>.GetEnumerator()
> in
> c:\CSharp\NH\nhibernate\src\NHibernate\Collection\Generic\PersistentGenericSet.cs:229
>
> donde el problema es la generacion del proxy, seguramente la gente del
> hosting, cambie los permisos a medium a trust o algo por el estilo.
>
> parte del problema lo resolvi cambiando los Session.Load por Session.Get,
> pero me quedo un solo lugar en una query que no evitar que se genere el
> proxy.
>
> tengo estas 3 clases :
>
> public
> class Temporada : Entity
> {
> public ISet<Galeria> Galerias { get; set; }
> public virtual string Name { get; set; }
> public virtual DateTime Creation { get; set; }
>
> protected Temporada()
> {
> Galerias = new HashedSet<Galeria>();
> }
> public Temporada(string name):this()
> {
> Name = name;
> }
> public void AddGaleria(Galeria galeria)
> {
> Galerias.Add(galeria);
> galeria.Temporada = this;
> }
> public void RemoveGaleria(Galeria g)
> {
> g.Temporada = null;
> Galerias.Remove(g);
> }
>
>
> public
> class Galeria : Entity
> {
> public Linea Linea { get; set;}
> public Temporada Temporada { get; set; }
> private readonly IList<Imagen> imagenes;
> public IEnumerable<Imagen> Imagenes
> {
> get
> {
> return imagenes;
> }
> }
>  internal Galeria()
> {
>  }
> public Galeria(Linea r)
> {
> Linea = r;
> imagenes =
> new List<Imagen>();
> }
> public void AddImagen(Imagen img)
> {
> imagenes.Add(img);
> }
> public void AddImageRange(IList<Imagen> imgList)
> {
> foreach (var img in imgList)
> {
> imagenes.Add(img);
> }
> }
> public void ClearImages()
> {
> imagenes.Clear();
> }
> public void RemoveImagen(Imagen img)
> {
> imagenes.Remove(img);
> }
> }
>
> public class Linea : Entity
> {
> public virtual string Description { get; set; }
> public Linea()
> {
> }
> public Linea (string descripcion)
> {
> Description = descripcion;
> }
> }
>
> les saque el virtual a las referencias y colecciones para evitar el
> Lazy..pero
> con la siguiente query:
>
> var criteria = sessionFactory.GetCurrentSession().CreateCriteria(typeof (
> Temporada));
> criteria.AddOrder(
> Order.Desc("Creation"))
> .SetMaxResults(count);
> return criteria.List<Temporada>();
>
> la temporada y las galerias las trae bien, pero la referencia a Linea en
> las instancias de galeria con proxies.
>
> como puedo evitar que sea proxy ?
>
> el mapping generado con ConfORM es :
>
> <class name="Temporada">
>     <id name="Id" column="TemporadaId" type="Int32">
>       <generator class="hilo" />
>     </id>
>     <set name="Galerias" inverse="true" cascade="all,delete-orphan">
>       <key column="TemporadaId" on-delete="cascade" />
>       <one-to-many class="Galeria" />
>     </set>
>     <property name="Name" />
>     <property name="Creation" />
>   </class>
>   <class name="Linea">
>     <id name="Id" column="LineaId" type="Int32">
>       <genera tor class="hilo" />
>     </id>
>     <property name="Description" />
>   </class>
>   <class name="Galeria">
>     <id name="Id" column="GaleriaId" type="Int32">
>       <generator class="hilo" />
>     </id>
>     <many-to-one name="Linea" column="LineaId" not-null="true" />
>     <many-to-one name="Temporada" column="TemporadaId" not-null="true" />
>     <list name="Imagenes" access="field.camelcase" cascade="all">
>       <key column="GaleriaId" />
>       <list-index />
>     &nb sp; <one-to-many class="Imagen" />
>     </list>
>   </class>
> disculpen la longitud del email!
>
> gracias!
> **
> *
>
> Mario Dal Lago
> *
>
>
>
> --
> Para escribir al Grupo, hágalo a esta dirección:
> [email protected]
> Para más, visite: http://groups.google.com/group/NHibernate-Hispano




-- 
Saludos,

Alberto Alcaide Vargas
Desarrollador de Software
Fono 88077791

-- 
Para escribir al Grupo, hágalo a esta dirección: 
[email protected]
Para más, visite: http://groups.google.com/group/NHibernate-Hispano

Responder a