自定义交付UI扩展生成“无效类名”;错误

本文关键字:无效类名 错误 无效 UI 交付 扩展 自定义 | 更新日期: 2023-09-27 17:51:06

除了编译样例SSRS交付扩展并按照说明将其部署到服务器之外,我什么也没做。当我调用ReportService2010 ListExtensions web服务方法时,扩展显示在结果列表中。但是,当我在报表管理器中创建订阅时,只要我从可用的交付扩展名的下拉列表中选择Printer Delivery Sample,我就会得到这个错误:

无效的类名

我在Windows Server 2012 R2上运行SSRS 2012 SP2 (11.0.5569.0)

编辑:我在日志中发现了这个

结果是ReportManager (ASP。. NET UI) 日志发送到C:'Program Files'Microsoft SQL Server'MSRSxx.MSSQLSERVER'Reporting Services'LogFiles目录。我最初在这些文件中只看到与订阅(即服务)相关的事件,并假设如果ReportManager确实记录了日志,那么这些文件一定在其他地方。

extensionfactory ReportManager_0-3 ! 53 c !06/02/2015: 16:27:40:: e错误:异常捕获实例化打印机交付示例报表服务器扩展:

System.Security.SecurityException: Request for the permission of type 'System.Web.AspNetHostingPermission, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' failed.

at System.Reflection.Assembly._GetType(String name, Boolean throwOnError, Boolean ignoreCase)
at System.Reflection.Assembly.GetType(String name, Boolean throwOnError)
at Microsoft.ReportingServices.Diagnostics.ExtensionClassFactory.<>c__DisplayClass9.<GetExtensionLocalizedName>b__6()
at Microsoft.ReportingServices.Diagnostics.RevertImpersonationContext.<>c__DisplayClass1.<Run>b__0(Object state)
at System.Security.SecurityContext.runTryCode(Object userData)
at System.Runtime.CompilerServices.RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup(TryCode code, CleanupCode backoutCode, Object userData)
at System.Security.SecurityContext.Run(SecurityContext securityContext, ContextCallback callback, Object state)
at Microsoft.ReportingServices.Diagnostics.RevertImpersonationContext.Run(ContextBody callback)
at Microsoft.ReportingServices.Diagnostics.ExtensionClassFactory.GetExtensionLocalizedName(Extension extConfig, Boolean removeFailuresAndContinue)

失败的操作是:

InheritanceDemand

第一个失败的权限类型是:

System.Web.AspNetHostingPermission

第一个失败的权限是:

<IPermission class="System.Web.AspNetHostingPermission, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" version="1" Level="Minimal"/>

需求是:

<PermissionSet class="System.Security.PermissionSet" version="1">
  <IPermission class="System.Web.AspNetHostingPermission, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" version="1" Level="Minimal"/>
</PermissionSet>

失败程序集的授权集为:

<PermissionSet class="System.Security.PermissionSet" version="1">
  <IPermission class="System.Security.Permissions.SecurityPermission, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" version="1" Flags="Execution"/>
  <IPermission class="System.Security.Permissions.StrongNameIdentityPermission, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" version="1" PublicKeyBlob="00240000048000009400000006020000002400005253413100040000010001009D92F3DD932D20261ADD96F81554DD22E89D6C820CE81177D791891A9415FE8499B0A22270329D737DD29FCF15784BCE44B876E2099FA06B113712581C764E7B033E3F487EA8774CB78CB79FA5951A501F4FA61496F0E07AB2A48020A99435C0F2DE60282540E72CCCB63F05ECEFB90BD542E30EE34AA8005C51F2EC0BF606C0" Name="Microsoft.Samples.ReportingServices.PrinterDeliverySample" AssemblyVersion="1.0.5627.17054"/>
  <IPermission class="System.Security.Permissions.UrlIdentityPermission, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" version="1" Url="file:///C:/Program Files/Microsoft SQL Server/MSRS11.MSSQLSERVER/Reporting Services/ReportManager/bin/Microsoft.Samples.ReportingServices.PrinterDeliverySample.DLL"/>
  <IPermission class="System.Security.Permissions.ZoneIdentityPermission, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" version="1" Zone="MyComputer"/>
</PermissionSet>

程序集或AppDomain失败是:

Microsoft.Samples.ReportingServices.PrinterDeliverySample, Version=1.0.5627.17054, Culture=neutral, PublicKeyToken=f0209f2bcebc8576

失败的程序集的Zone为:

MyComputer

失败的程序集的Url为:

file:///C:/Program Files/Microsoft SQL Server/MSRS11.MSSQLSERVER/Reporting Services/ReportManager/bin/Microsoft.Samples.ReportingServices.PrinterDeliverySample.DLL

是的,我觉得有点傻。好了,现在我该怎么处理这些信息呢?是时候再温习一下代码访问安全性了

自定义交付UI扩展生成“无效类名”;错误

看看这个:

http://blogs.msdn.com/b/friis/archive/2010/06/09/system-security-securityexception-request-for-the-permission-of-type-system-web-aspnethostingpermission-failed.aspx

尝试将应用程序池标识切换到网络服务。另外,检查您的DLL,看看是否需要解封,这在那篇文章中也提到了。

请确认您失败的程序集可用/注册在C:'windows'assembly of reportserver machine。如果它没有注册,那么尝试在GAC"将程序集安装到全局程序集缓存"中安装它

全局程序集缓存