2011-01-25 93 views
10

我有一个使用WIF进行身份验证的wcf web服务。这个网络服务的部分责任是生成一个报告并发送给它。如果我用数据呈现报表,只有一切都很好。如果我有任何报告参数,报告常数,甚至只是DateTime.Now我得到以下异常:Reporting Services LocalReport和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 

我可以运行在一个WCF服务的同一报告不使用WIF,这么清楚一些有关安全环境受到干扰。

我真的不知道如何着手解决这个问题。谁能帮忙? 谢谢!

回答

16

这工作:

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

我真的不明白为什么。我明白,报告正被授予无法从WIF获得的权限,但我不明白这些权限是哪些权限或为什么需要它们。所以,我的答案是“给男人一条鱼”,但是可以通过解释更深层次的问题,让别人“教导一个男人去钓鱼”吗?

2

我正面临与Windows身份验证的MVC 3/WinForms混合应用程序相同的问题。我花了一些时间试图确定报告运行所需的最低权限。对我而言,这也适用于:

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

ReportViewer.LocalReport.SetBasePermissionsForSandboxAppDomain(permissionSet); 

根据你是多么偏执的人,你可能会觉得更安全一点的锁定权限集。

不幸的是,我没有解释为什么这些特定的权限是必要的,不知道是否需要其他情况下的其他人,但我希望这是有用的。