Служба Reporting Services LocalReport и WIF

У меня есть wcf webservice, который использует WIF для аутентификации. Часть ответственности этого веб-сервиса заключается в создании отчета и отправке его по электронной почте. Если я передаю отчет с данными, все будет в порядке. Если я включаю какие-либо параметры отчета, константы отчетов или даже просто DateTime.Now, я получаю следующее исключение:

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, поэтому явно что-то о среде безопасности является fubarred.

Я действительно не знаю, как приступить к решению этой проблемы. Может ли кто-нибудь помочь? Спасибо!

Ответ 1

Это работает:

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

Я действительно не понимаю, почему. Я понимаю, что для отчета предоставляются разрешения, которые он не может получить из WIF, но я не понимаю, какие разрешения есть или зачем они нужны. Итак, мой ответ "дает человеку рыбу", но может ли кто-нибудь еще "научить человека ловить рыбу", объясняя более глубокую проблему?

Ответ 2

Я столкнулся с той же проблемой с гибридным приложением MVC 3/WinForms с проверкой подлинности Windows. Я потратил некоторое время, пытаясь определить минимальные разрешения, необходимые для запуска отчета. Для меня это также работает:

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

ReportViewer.LocalReport.SetBasePermissionsForSandboxAppDomain(permissionSet);

В зависимости от того, насколько вы параноик, вы можете почувствовать себя более безопасным с чуть более заблокированным набором разрешений.

К сожалению, у меня нет объяснений, почему эти конкретные разрешения необходимы и не знают, нужны ли другие при разных обстоятельствах, но я надеюсь, что это полезно.