2011-01-25 10 views
10

Tengo un servicio web wcf que usa WIF para la autenticación. Parte de la responsabilidad de este servicio web es generar un informe y enviarlo por correo electrónico. Si renderizo el informe con datos, solo todo está bien. Si incluyo alguna parámetros del informe, constantes de informes, o incluso sólo DateTime.Now consigo la siguiente excepción:Reporting Services LocalReport y WIF

An error occurred during local report processing.Failed to load expression host assembly. Details: Request for the permission of type 'System.Security.Permissions.SecurityPermission, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' failed 

que puede ejecutar el mismo informe en un servicio WCF que no utiliza WIF, por lo que claramente algo acerca de la el entorno de seguridad está fubarred.

Realmente no sé cómo proceder para resolver este problema. ¿Alguien puede ayudar? Gracias!

Respuesta

16

Esto funciona:

var reportInstance = new LocalReport(); 
reportInstance.SetBasePermissionsForSandboxAppDomain(new PermissionSet(PermissionState.Unrestricted)); 

Realmente no entiendo por qué. Entiendo que al informe se le otorgan permisos que no puede obtener de WIF, pero no entiendo qué permisos son o por qué los necesita. Entonces, mi respuesta "le da a un hombre un pez", pero ¿alguien más puede "enseñar a un hombre a pescar" al explicar el problema más profundo?

2

Estaba enfrentando el mismo problema con una aplicación híbrida MVC 3/WinForms con Autenticación de Windows. Pasé un tiempo tratando de determinar los permisos mínimos necesarios para que se ejecute el informe. Para mí, esto también funciona:

var permissionSet = new PermissionSet(PermissionState.None); 
var flags = SecurityPermissionFlag.Execution | 
      SecurityPermissionFlag.ControlPrincipal; 
var permission = new SecurityPermission(flags); 
permissionSet.AddPermission(permission); 

ReportViewer.LocalReport.SetBasePermissionsForSandboxAppDomain(permissionSet); 

Dependiendo de qué tan paranoica usted es, usted podría sentirse más seguro con un poco más bloqueado conjunto de permisos.

Lamentablemente, no tengo ninguna explicación de por qué estos permisos particulares son necesarios y no sé si se necesitan otros en circunstancias diferentes, pero espero que esto sea útil.

Cuestiones relacionadas