Вопрос

Мы имеем дело с проблемой при использовании Nhibernate с удалением в машине с полным доверием окружающей среды (на самом деле это наша машина Dev).

Проблема происходит, когда WHE пытается отправить в качестве параметра объект, ранее извлеченный с сервера, который содержит прокси NHIBERNATE в одном из свойств (ленивый).

Как мы находимся в разработке Dev, нет ограничений в уровне доверия веб-приложения (он установлен на полный) и, как плюс, мы настроили сборки Nhibernate и Castle в полное доверие в CAS (даже думая, что это d не нужен, как приложение для удаления в 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)

Заранее спасибо.

Это было полезно?

Решение

На самом деле, я работаю с 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;

Надеюсь, это поможет кому-либо еще.

С уважением.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top