我正在尝试将自定义程序集添加到SSRS SharePoint Integrated报表服务中。但是,自定义dll只会以部分受信任的形式返回。
我已经进入rssrvpolicy.config文件,并添加了一个代码组,该代码组使用UrlMembershipCondition证据并将其指向带有DLL的报告Bin(带有PermissionSetName =“ FullTrust”),并且DLL存储在C中:\ Program Files \ Common文件\ microsoft共享\ Web服务器扩展\ 16 \ WebServices \ Reporting \ bin
然后我尝试将DLL添加到GAC中,但这又产生了与仅部分受信任时相同的错误。
出现此错误的原因是因为我试图使用执行日志记录的完全受信任的DLL(在GAC中)。似乎gac中的日志DLL是受信任的,因此我不明白为什么在GAC中或显式告知要受信任时为什么不信任此DLL。
我正在使用.Net 4.6,我知道它对CAS系统有一些更改。
答案 0 :(得分:0)
我终于能够解决这个问题。在这种情况下,我的解决方案是使用3.0样式的CAS或级别1(Microsoft Docs)。我不知道这是否是最好的解决方案,但这是一个可行的解决方案。
步骤1: 在每个.cs文件顶部的项目中,请确保使用以下属性指定要使用1级安全规则集:
[assembly: SecurityRules(SecurityRuleSet.Level1)]
此属性应位于您using语句的下方,但应像此示例一样位于namespace关键字之上。
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\16\WebServices\Reporting\bin
如果您使用的是“纯模式”,请导航至以下位置并将其复制到文件夹中。
C:\Program Files\Microsoft SQL Server
然后遍历每个编号的文件夹(例如90,100,130等),直到找到Bin文件夹。
我建议将自定义程序集而不是GAC放在这里,因为很容易通过Reporting Services Web配置授予完全信任。
步骤3: 最后,从bin文件夹返回一个级别,到您可以看到报表服务的web.config文件的位置。在报告服务中,找到以下标记
<trust level="something" originUrl\""/>
用Full代替关卡
<trust level="Full" originUrl\""/>
注意:据我所知,这样做将使Bin文件夹中找到的所有DLL都以完全信任方式运行
执行IISReset并测试我们的自定义程序集。您应该能够完全信任并避免任何可怕的.Net 4.0透明代码问题。
我不能保证这对每个人都有效。整个.Net 4.6 CAS设置非常复杂且难以理解。以下是帮助我找到此答案的Microsoft文档的列表。