Question

Nous avons affaire à un problème lors de l'utilisation NHibernate avec Remoting dans une machine à pleine confiance enviroment (en fait que de notre machine de dev).

Le problème se produit lorsque vous essayez d'envoyer whe comme paramètre un objet précédemment récupéré à partir du serveur, qui contient un proxy NHibernate dans l'une des propriétés (un paresseux).

Comme nous sommes dans la machine de dev, il n'y a aucune restriction dans le niveau de confiance de l'application Web (il est mis plein) et, en plus, nous avons configuré les assemblées de NHibernate et du château à la pleine confiance dans le CAS (même pensée qu'il ne serait pas nécessaire que l'application d'accès distant dans IIS a le niveau de confiance totale).

Est-ce que quelqu'un a une idée de ce qui peut être à l'origine de cette exception? Trace de la pile ci-dessous.

  InnerException: System.Security.SecurityException
   Message="Falha na solicitação da permissão de tipo 'System.Security.Permissions.ReflectionPermission, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'."
   Source="mscorlib"
   GrantedSet=""
   PermissionState="<IPermission class=\"System.Security.Permissions.ReflectionPermission, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\"\r\nversion=\"1\"\r\nFlags=\"ReflectionEmit\"/>\r\n"
   RefusedSet=""
   Url=""
   StackTrace:
        em System.Security.CodeAccessSecurityEngine.Check(Object demand, StackCrawlMark& stackMark, Boolean isPermSet)
        em System.Security.CodeAccessPermission.Demand()
        em System.Reflection.Emit.AssemblyBuilder.DefineDynamicModuleInternalNoLock(String name, Boolean emitSymbolInfo, StackCrawlMark& stackMark)
        em System.Reflection.Emit.AssemblyBuilder.DefineDynamicModuleInternal(String name, Boolean emitSymbolInfo, StackCrawlMark& stackMark)
        em System.Reflection.Emit.AssemblyBuilder.DefineDynamicModule(String name, Boolean emitSymbolInfo)
        em Castle.DynamicProxy.ModuleScope.CreateModule(Boolean signStrongName)
        em Castle.DynamicProxy.ModuleScope.ObtainDynamicModuleWithWeakName()
        em Castle.DynamicProxy.ModuleScope.ObtainDynamicModule(Boolean isStrongNamed)
        em Castle.DynamicProxy.Generators.Emitters.ClassEmitter.CreateTypeBuilder(ModuleScope modulescope, String name, Type baseType, Type[] interfaces, TypeAttributes flags, Boolean forceUnsigned)
        em Castle.DynamicProxy.Generators.Emitters.ClassEmitter..ctor(ModuleScope modulescope, String name, Type baseType, Type[] interfaces, TypeAttributes flags, Boolean forceUnsigned)
        em Castle.DynamicProxy.Generators.Emitters.ClassEmitter..ctor(ModuleScope modulescope, String name, Type baseType, Type[] interfaces, TypeAttributes flags)
        em Castle.DynamicProxy.Generators.Emitters.ClassEmitter..ctor(ModuleScope modulescope, String name, Type baseType, Type[] interfaces)
        em Castle.DynamicProxy.Generators.BaseProxyGenerator.BuildClassEmitter(String typeName, Type parentType, Type[] interfaces)
        em Castle.DynamicProxy.Generators.BaseProxyGenerator.BuildClassEmitter(String typeName, Type parentType, IList interfaceList)
        em Castle.DynamicProxy.Generators.ClassProxyGenerator.GenerateCode(Type[] interfaces, ProxyGenerationOptions options)
        em Castle.DynamicProxy.Serialization.ProxyObjectReference.RecreateClassProxy()
        em Castle.DynamicProxy.Serialization.ProxyObjectReference.RecreateProxy()
        em Castle.DynamicProxy.Serialization.ProxyObjectReference..ctor(SerializationInfo info, StreamingContext context)

Je vous remercie à l'avance.

Était-ce utile?

La solution

En fait, le travail I avec Pedro, nous avons trouvé le problème. Sérialiseur du service Remoting doit être explicite configuré pour autoriser les appels de confiance totale dans le côté serveur

Quelque chose comme (fichier de configuration):

<channels>
<channel ref="http">
<serverProviders> 
<provider ref="wsdl" />
<formatter ref="soap" typeFilterLevel=Low />
<formatter ref="binary" typeFilterLevel=Low />
</serverProviders>
</channel>
</channels>

Or (programatically):

BinaryServerFormatterSinkProvider provider = new BinaryServerFormatterSinkProvider();
provider.TypeFilterLevel = TypeFilterLevel.Full;

Hope this helps quelqu'un d'autre.

Cordialement.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top