现在的位置: 首页 > 综合 > 正文

一次解决ReportingServices调用自定义程序集“错误号”的经历

2012年07月07日 ⁄ 综合 ⁄ 共 2361字 ⁄ 字号 评论关闭

问题是这样的,我的一个同事反应说遇到一个技术问题,问题的场景是这样的:在ReportingServices调用本地程序集时,在预览的时候可以正常显示,可是部署到服务器上或在开发窗口调试的时候,就显示一个“错误号”,具体错误的内容什么都没有,开始的时候这的确让我们很难受。

解决方案一:

通过Google,搜索这些关键字,网上一位大牛给出的解释是,需要把ReportingServices的服务跟iis的服务停止掉,然后再把dll复制到相应的文件夹中,再启动这些服务。经过我与同事的多次尝试,都以失败而告终。方案一宣告失败。当时这位大牛给的解释就非常的牵强,难以让人信服。

方案二:

通过对比,进行合理的推理,得出可疑的地方:预览窗口可以正常显示,而部署到服务器上或开发窗口不能显示,这说明有一次被正常执行了,这很容易让我想到是权限的问题。

报表设计器有两种预览模式:预览选项卡以及在以 DebugLocal 模式启动报表项目时启动的弹出式预览窗口。“预览”选项卡不是安全对象组件,不应用安全策略设置。

于是想到了修改程序集的访问权限。

 

下表列出了 Reporting Services 中的策略配置文件、文件位置(假定默认安装)及其各自的功能。

文件名 位置(默认安装) 说明

rssrvpolicy.config

C:\Program Files\Microsoft SQL Server\MSSQL\Reporting Services\ReportServer

报表服务器策略配置文件。在将报表部署到报表服务器之后,这些安全策略主要影响报表表达式和自定义程序集。此策略文件还影响部署到报表服务器的自定义数据、传递、呈现和安全扩展插件。

rsmgrpolicy.config

C:\Program Files\Microsoft SQL Server\MSSQL\Reporting Services\ReportManager

报表管理器策略配置文件。这些安全策略影响扩展报表管理器的所有程序集,例如用于自定义传递的订阅用户界面扩展插件。

rspreviewpolicy.config

C:\Program Files\Microsoft SQL Server\80\Tools\ReportDesigner

报表设计器独立预览策略配置文件。这些安全策略影响预览和开发期间报表中使用的自定义程序集和报表表达式。这些策略还影响部署到报表设计器的自定义扩展插件,例如事件处理扩展插件。

 

 除此以外,还有Web.config文件。

这些config文件的程序集配置都差不多,具体操作如下:

1.文件中查找文本Name="Report_Expressions_Default_Permissions"将其上面一行内容修改为PermissionSetName="FullTrust";如果是生产环境,不建议这样操作,只推荐在开发环境下进行这样的修改。(ReportingServices对于表达式默认执行权限是“Execution”,需要修改为“FullTrust”)

2. 在相应的Config文件中(web.config除外),在倒数第2个</CodeGroup>前增加一段引用自定义程序集的内容:

增加的程序集的权限设置

 由于我的dll采用了强名称,所以class="StrongNameMembershipCondition",根据dll的方式不同,请选择相应的方式,具体的可以参考MSDN。

3.在Web.config中,修改 <system.web>节点内 的<trust>为<trust level="Full" originUrl="" />

如果对于程序集的设置不太懂,可以有两种办法:

1.查找MSDN,深入学习程序集的设置。

2.向GAC中添加一个程序集,设置相应的权限,然后在C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\CONFIG\security.config中查找刚才添加的程序集权限设置,照猫画虎的去进行修改。这是一种简单快速的解决问题的办法。

 为了避免每次都要向相应的文件夹拷贝程序集,我编写了一个批处理,省的每次都手动找,浪费时间。

拷贝程序集的批处理代码

 

 

抱歉!评论已关闭.