SSRS 自定义程序集未获得完全信任
SSRS Custom Assembly Doesn't Recieve Full Trust
我正在尝试将自定义程序集添加到 SSRS SharePoint 集成报告服务中。然而,自定义 dll 不断返回,仅部分受信任。
我已经进入 rssrvpolicy.config 文件并添加了一个使用 UrlMembershipCondition 证据的代码组,并将其指向 DLL 所在的报告 Bin,PermissionSetName="FullTrust",并且DLL存放在C:\Program Files\Common files\microsoft shared\Web Server Extensions\WebServices\Reporting\bin
然后我尝试将 DLL 添加到 GAC,但这也返回了同样的错误,因为它只是部分受信任。
出现此错误的原因是因为我正在尝试使用执行日志记录的完全受信任的(在 GAC 中)DLL。看来 gac 中的日志记录 DLL 是受信任的,所以我不明白为什么这个 DLL 在 GAC 中或明确告知受信任时不受信任。
我正在使用 .Net 4.6,我知道它对 CAS 系统进行了一些更改。
我终于能够解决这个问题。我在这种情况下的解决方案是使用 3.0 样式的 CAS 或级别 1 (Microsoft Docs)。我不知道这是否是最佳解决方案,但它是一个可行的解决方案。
第一步:
在每个 .cs 文件顶部的项目中,确保通过使用以下属性指定要使用 1 级安全规则集:
[assembly: SecurityRules(SecurityRuleSet.Level1)]
此属性应位于您的 using 语句下方,但位于名称空间关键字上方,如本例所示。
using Microsoft.SharePoint.Client;
[assembly: SecurityRules(SecurityRuleSet.Level1)]
namespace something.something{
...YOUR CODE HERE...
}
第 2 步:
查看您是在 SharePoint 集成模式还是本机模式下使用报告服务。
如果您使用的是 SharePoint 2016 集成模式,请导航至以下位置并将您的 DLL 复制到该文件夹中。
C:\Program Files\Common Files\microsoft shared\Web Server Extensions\WebServices\Reporting\bin
如果您使用的是本机模式,请导航至以下位置并将其复制到文件夹中。
C:\Program Files\Microsoft SQL Server
然后浏览每个编号的文件夹(IE 90,100,130 等),直到找到 Bin 文件夹。
我建议将您的自定义程序集放在此处,而不是 GAC,因为通过 Reporting Services Web 配置可以轻松授予完全信任。
第 3 步:
最后从 bin 文件夹返回上一级,您可以在其中看到报告服务的 web.config 文件。在报告服务中找到以下标签
<trust level="something" originUrl\""/>
将关卡替换为完整
<trust level="Full" originUrl\""/>
注意:据我所知,这样做将使 Bin 文件夹 运行 中找到的所有 DLL 都具有完全信任
执行 IISReset 并测试您的自定义程序集。您应该能够完全信任并避免任何可怕的 .Net 4.0 透明代码问题。
我不能保证这对每个人都有效。整个 .Net 4.6 CAS 设置非常复杂且难以理解。下面是帮助我找到这个答案的 Microsoft 文档列表。
我正在尝试将自定义程序集添加到 SSRS SharePoint 集成报告服务中。然而,自定义 dll 不断返回,仅部分受信任。
我已经进入 rssrvpolicy.config 文件并添加了一个使用 UrlMembershipCondition 证据的代码组,并将其指向 DLL 所在的报告 Bin,PermissionSetName="FullTrust",并且DLL存放在C:\Program Files\Common files\microsoft shared\Web Server Extensions\WebServices\Reporting\bin
然后我尝试将 DLL 添加到 GAC,但这也返回了同样的错误,因为它只是部分受信任。
出现此错误的原因是因为我正在尝试使用执行日志记录的完全受信任的(在 GAC 中)DLL。看来 gac 中的日志记录 DLL 是受信任的,所以我不明白为什么这个 DLL 在 GAC 中或明确告知受信任时不受信任。
我正在使用 .Net 4.6,我知道它对 CAS 系统进行了一些更改。
我终于能够解决这个问题。我在这种情况下的解决方案是使用 3.0 样式的 CAS 或级别 1 (Microsoft Docs)。我不知道这是否是最佳解决方案,但它是一个可行的解决方案。
第一步: 在每个 .cs 文件顶部的项目中,确保通过使用以下属性指定要使用 1 级安全规则集:
[assembly: SecurityRules(SecurityRuleSet.Level1)]
此属性应位于您的 using 语句下方,但位于名称空间关键字上方,如本例所示。
using Microsoft.SharePoint.Client;
[assembly: SecurityRules(SecurityRuleSet.Level1)]
namespace something.something{
...YOUR CODE HERE...
}
第 2 步: 查看您是在 SharePoint 集成模式还是本机模式下使用报告服务。
如果您使用的是 SharePoint 2016 集成模式,请导航至以下位置并将您的 DLL 复制到该文件夹中。
C:\Program Files\Common Files\microsoft shared\Web Server Extensions\WebServices\Reporting\bin
如果您使用的是本机模式,请导航至以下位置并将其复制到文件夹中。
C:\Program Files\Microsoft SQL Server
然后浏览每个编号的文件夹(IE 90,100,130 等),直到找到 Bin 文件夹。
我建议将您的自定义程序集放在此处,而不是 GAC,因为通过 Reporting Services Web 配置可以轻松授予完全信任。
第 3 步: 最后从 bin 文件夹返回上一级,您可以在其中看到报告服务的 web.config 文件。在报告服务中找到以下标签
<trust level="something" originUrl\""/>
将关卡替换为完整
<trust level="Full" originUrl\""/>
注意:据我所知,这样做将使 Bin 文件夹 运行 中找到的所有 DLL 都具有完全信任
执行 IISReset 并测试您的自定义程序集。您应该能够完全信任并避免任何可怕的 .Net 4.0 透明代码问题。
我不能保证这对每个人都有效。整个 .Net 4.6 CAS 设置非常复杂且难以理解。下面是帮助我找到这个答案的 Microsoft 文档列表。