我已经成功添加了一个自定义程序集,使用AddTrustedCodeModuleInCurrentAppDomain
. 我正在当前 appdomain 中执行报告。
当我尝试访问 SQL 时,我得到了报告服务System.Data.SqlClient.SqlClientPermission failed.
,我尝试将其添加System.Data
到上述受信任的程序集中,但它没有帮助。
如何确保存在此权限?
我已经成功添加了一个自定义程序集,使用AddTrustedCodeModuleInCurrentAppDomain
. 我正在当前 appdomain 中执行报告。
当我尝试访问 SQL 时,我得到了报告服务System.Data.SqlClient.SqlClientPermission failed.
,我尝试将其添加System.Data
到上述受信任的程序集中,但它没有帮助。
如何确保存在此权限?
从错误听起来像是您的登录凭据正在丢失。你使用什么样的授权?
如果您使用的是 Windows 授权,您可能会失去“您”的身份。听起来不太可能,因为您是从当前 appdomain 调用的。您可能希望更改连接字符串以指定用户名和密码。如果没有别的,它应该有助于调试。
祝你好运!
我找到了解决方案。您指定 System.Security.Policy.Evidence 执行程序集(或具有足够权限的程序集)到 LocalReport 以在执行期间使用。
reportViewer.LocalReport.ExecuteReportInCurrentAppDomain(System.Reflection.Assembly.GetExecutingAssembly().Evidence);
这有什么好运气吗?
我在本地模式下使用 Visual Studio 2008 中的 ReportViewer 控件,并将对象作为数据源。我的类被映射到我的数据库中的数据表。在对象中,它根据需要加载相关对象。因此,在您尝试使用该属性之前,它会保留引用为空,然后它会尝试自动从数据库中加载它。这些类使用 System.Data.SqlClient 命名空间。
当我与 Windows 窗体应用程序中的对象交互时,一切都按预期工作。但是当我传递要用作报表数据源的对象并尝试自动加载相关对象时,它会失败。该代码创建了一个 SqlConnection 对象,当我在其上调用 GetCommand() 时,会引发以下异常:
[System.Security.SecurityException] {
"Request for the permission of type 'System.Data.SqlClient.SqlClientPermission, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' failed."
} System.Security.SecurityException
我尝试搜索错误,但显示的所有结果都是针对在 SQL Server 或 ASP.Net 上运行的 CLR 程序集。在创建 SqlConnection 对象之前,我尝试在我的代码中添加以下调用(如搜索结果中所建议的那样),但它显然没有做任何事情:
System.Data.SqlClient.SqlClientPermission(System.Security.Permissions.PermissionState.Unrestricted).Assert();