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">
<generator 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 />
<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