【发布时间】:2017-01-30 12:26:58
【问题描述】:
问题总结
我正在支持使用 Microsoft.ReportViewer 库的旧 ASP.NET Intranet Web 应用程序。
运行时,报告抛出以下错误:
报告处理过程中发生错误。
分组“list1_Details_Group”的排序表达式包含错误:
请求类型的权限: 'System.Security.Permissions.SecurityPermission, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' 失败。
我所有的研究表明,这个问题是由于应用程序没有必要的信任级别(所有相关的堆栈溢出问题都通过将信任级别设置为完全来解决),但我的网络配置将信任级别定义为完全,所以我我完全不知道为什么会发生这个错误。
出于安全原因,我无法显示所有 Web 配置,但大部分都可以在此处找到:http://pastebin.com/GdJhHDhH 任何缺失的内容都已被注释或存根。
可能有用的详细信息
此问题是在将应用程序从 Forms Authentication 迁移到 Windows Authentication 后出现的。不一定相关,但很难忽略巧合。
这个问题发生在我的所有环境中:本地、开发和生产(将生产回溯到表单身份验证使这项工作正常进行)。
应用程序是用 .Net 4、C# 编写的
报告代码位于与 Web 应用程序不同的程序集中,而 Web 应用程序引用报告程序集。
Web 应用程序成功地从数据库中检索到与报告无关的其他应用程序区域的其他数据。
我对此束手无策,任何指导都会很棒。
更新:尝试的解决方案
尝试删除 list1_Details_Group。完成此操作后,报告的另一部分将引发相同的异常。
尝试使用带有 Windows 身份验证的模拟。应用程序继续以相同的方式工作,但在报告中引发了相同的异常。
尝试强烈命名应用程序中使用的所有程序集。否 应用程序继续以相同的方式工作,但在报告中抛出相同的异常。
尝试在 IIS 中使用“经典”托管管道。
【问题讨论】:
-
如何将凭据或身份验证传递给报告服务?
-
就数据库凭据而言,报告服务使用来自 Web 配置的连接字符串。在 Windows 凭据方面,我们使用我公司 Nuget 存储库中的自定义 MembershipProvider。
-
MembershipProvider 仅用于/需要用于表单身份验证。 Windows 身份验证应该在没有任何额外代码的情况下对用户进行身份验证(至少这是我的理解)。
-
您是否尝试过将模拟与 Windows 身份验证结合使用。我不确定它是否会有所帮助,但我认为至少值得测试。见here。
-
如果您从报告中删除
list1_Details_Group会发生什么情况,您是否会在报告的另一部分收到相同的错误?程序集是否强命名:blogs.msdn.microsoft.com/shawnfa/2003/06/20/… 虽然this answer 是 WinForms 而你的是 Web,但它有一些权限可以尝试,你也尝试过 policyFile,例如:<trustLevel name="RosettaSrv" policyFile="rssrvpolicy.config" /
标签: c# asp.net .net permissions reportviewer