NHibernate+;远程处理=ReflectionPermission异常

NHibernate+;远程处理=ReflectionPermission异常,nhibernate,remoting,castle-dynamicproxy,system.security,reflectionpermission,Nhibernate,Remoting,Castle Dynamicproxy,System.security,Reflectionpermission,在一台具有完全信任环境的机器(实际上这是我们的开发机器)中使用NHibernate进行远程处理时,我们正在处理一个问题 当我们尝试将以前从服务器检索到的对象作为参数发送时,会出现问题,该对象在其中一个属性(惰性属性)中包含NHibernate代理 由于我们在开发机器中,web应用程序的信任级别没有限制(设置为完全),另外,我们还将NHibernate和Castle的程序集配置为CAS中的完全信任(甚至认为这是不必要的,因为IIS中的远程处理应用程序具有完全信任级别) 有人知道是什么导致了这个异常

在一台具有完全信任环境的机器(实际上这是我们的开发机器)中使用NHibernate进行远程处理时,我们正在处理一个问题

当我们尝试将以前从服务器检索到的对象作为参数发送时,会出现问题,该对象在其中一个属性(惰性属性)中包含NHibernate代理

由于我们在开发机器中,web应用程序的信任级别没有限制(设置为完全),另外,我们还将NHibernate和Castle的程序集配置为CAS中的完全信任(甚至认为这是不必要的,因为IIS中的远程处理应用程序具有完全信任级别)

有人知道是什么导致了这个异常吗?堆栈跟踪如下

  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)
InnerException:System.Security.SecurityException
Message=“Falha na requestação da permissão de tipo'System.Security.Permissions.ReflectionPermission,mscorlib,版本=2.0.0.0,区域性=中性,PublicKeyToken=b77a5c561934e089。”
Source=“mscorlib”
GrantedSet=“”
PermissionState=“\r\n”
RefusedSet=“”
Url=“”
堆栈跟踪:
em System.Security.CodeAccessSecurityEngine.Check(对象请求、堆栈爬网标记和堆栈标记、布尔isPermSet)
em System.Security.CodeAccessPermission.Demand()
em System.Reflection.Emit.AssemblyBuilder.DefinedDynamicModuleInternalNolock(字符串名称、布尔emitSymbolInfo、StackScrawlMark和stackMark)
em System.Reflection.Emit.AssemblyBuilder.DefinedDynamicModuleInternal(字符串名称、布尔emitSymbolInfo、StackScrawlMark和stackMark)
em System.Reflection.Emit.AssemblyBuilder.DefinedDynamicModule(字符串名称,布尔emitSymbolInfo)
em Castle.DynamicProxy.ModuleScope.CreateModule(布尔符号strong名称)
em Castle.DynamicProxy.ModuleScope.ActainDynamicModuleWithWeakName()
em Castle.DynamicProxy.ModuleScope.ActaindynamicModule(布尔isStrongNamed)
em Castle.DynamicProxy.Generators.Emitters.ClassEmitter.CreateTypeBuilder(ModuleScope ModuleScope、字符串名称、类型baseType、类型[]接口、类型属性标志、布尔强制无符号)
em Castle.DynamicProxy.Generators.Emitters.ClassEmitter..ctor(ModuleScope ModuleScope,字符串名称,类型baseType,类型[]接口,类型属性标志,布尔强制无符号)
em Castle.DynamicProxy.Generators.Emitters.ClassEmitter..ctor(ModuleScope ModuleScope,字符串名称,类型baseType,类型[]接口,类型属性标志)
em Castle.DynamicProxy.Generators.Emitters.ClassEmitter..ctor(ModuleScope ModuleScope,字符串名称,类型baseType,类型[]接口)
em Castle.DynamicProxy.Generators.BaseProxyGenerator.BuildClassEmitter(字符串类型名称、类型父类型、类型[]接口)
em Castle.DynamicProxy.Generators.BaseProxyGenerator.BuildClassEmitter(字符串类型名称、类型父类型、IList接口列表)
em Castle.DynamicProxy.Generators.ClassProxyGenerator.GenerateCode(类型[]接口,ProxyGenerationOptions)
em Castle.DynamicProxy.Serialization.ProxyObjectReference.RecreateClassProxy()文件
em Castle.DynamicProxy.Serialization.ProxyObjectReference.RecreateProxy()文件
em Castle.DynamicProxy.Serialization.ProxyObjectReference..ctor(SerializationInfo信息,StreamingContext上下文)

提前感谢。

事实上,我与Pedro一起工作,我们发现了问题:远程处理服务的序列化程序必须明确配置为允许在服务器端进行完全信任调用

类似于(配置文件):

希望这对其他人有帮助

问候

<channels>
<channel ref="http">
<serverProviders> 
<provider ref="wsdl" />
<formatter ref="soap" typeFilterLevel=Low />
<formatter ref="binary" typeFilterLevel=Low />
</serverProviders>
</channel>
</channels>
BinaryServerFormatterSinkProvider provider = new BinaryServerFormatterSinkProvider();
provider.TypeFilterLevel = TypeFilterLevel.Full;