10

我有一个使用 WIF 进行身份验证的 wcf 网络服务。此 Web 服务的部分职责是生成报告并通过电子邮件发送。如果我用数据呈现报告,那么一切都很好。如果我包含任何报告参数、报告常量,甚至只是 DateTime。现在我得到以下异常:

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

我可以在不使用 WIF 的 WCF 服务中运行相同的报告,因此很明显,有关安全环境的某些内容是令人担忧的。

我真的不知道如何着手解决这个问题。任何人都可以帮忙吗?谢谢!

4

2 回答 2

16

这有效:

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

我真的不明白为什么。我确实了解该报告被授予了无法从 WIF 获得的权限,但我不明白这些权限是什么或为什么需要这些权限。所以,我的回答“给了一个人一条鱼”,但是其他人可以通过解释更深层次的问题来“教一个人钓鱼”吗?

于 2011-01-25T17:59:19.860 回答
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);

根据您的偏执程度,您可能会觉得使用更多锁定权限集会更安全。

可悲的是,我无法解释为什么这些特定权限是必要的,也不知道在不同情况下是否需要其他权限,但我希望这很有用。

于 2012-03-20T08:40:07.640 回答