Почему VS 2010 ASP .NET ReportViewer не может отобразить параметры, если указан пользовательский RoleProvider? - PullRequest
0 голосов
/ 29 июня 2010

Я взял образец отчета SSRS из http://gotreportviewer.com/. В отчете отображаются некоторые данные о клиентах и ​​параметр "Город". В отчете также используется параметр «Город» для фильтрации данных. Этот отчет работает нормально, если я не включил пользовательский RoleProvider через web.config. Я установил точки останова во всех методах моего пользовательского подкласса RoleProvider, и я создал UserDecorator, чтобы обернуть пользовательский контекст по умолчанию, чтобы я мог также установить точку останова там.

Когда пользовательский RoleProvider включен, отчет не может правильно отображаться, но событие ReportError не вызывается. Кроме того, ни один из методов в RoleProvider или пользовательском IPrincipal не вызывается. Ниже приведен отладочный вывод из окна вывода:

Первое случайное исключение типа «System.Security.SecurityException» произошло в mscorlib.dll

Первое случайное исключение типа «System.Security.SecurityException» произошло в Microsoft.ReportViewer.ProcessingObjectModel.dll

Первое случайное исключение типа «System.Security.SecurityException» произошло в Microsoft.ReportViewer.Common.dll

Первое случайное исключение типа «Microsoft.ReportingServices.ReportProcessing.ReportProcessingException» произошло в Microsoft.ReportViewer.Common.dll

Первое случайное исключение типа «Microsoft.ReportingServices.ReportProcessing.ReportProcessingException» произошло в Microsoft.ReportViewer.Common.dll

Первое случайное исключение типа «Microsoft.ReportingServices.ReportProcessing.ProcessingAbortedException» произошло в Microsoft.ReportViewer.Common.dll

Насколько я понимаю, Code Access Security в .NET 4.0 устарела, поэтому я немного озадачен тем, каким может быть исключение ReportProcessingException. Я не думаю, что это проблема доверия, потому что отчет выполняется очень хорошо, когда не используется пользовательский RoleProvider. Я не понимаю, почему RoleProvider влияет на что-либо, поскольку ни один из его методов никогда не вызывается.

Требуется, чтобы проект использовал собственный RoleProvider.

Вот ссылка на демонстрационный проект: http://cid -7c1d9f1e46206d43.office.live.com / self.aspx / Public / Blog% 20Solutions / ReportViewerDemo.zip

Включить или отключить RoleProvider через web.config

Может кто-нибудь объяснить, почему это происходит? И что такое обходной путь? Спасибо!

1 Ответ

0 голосов
/ 30 июня 2010

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

PermissionSet permissions = new PermissionSet(PermissionState.None);
permissions.AddPermission(new FileIOPermission(PermissionState.Unrestricted));
permissions.AddPermission(new SecurityPermission(SecurityPermissionFlag.Execution));

ReportViewer1.LocalReport.SetBasePermissionForSandboxAppDomain(permissions);
...