SSRS - 自定义代码

时间:2011-12-12 14:57:40

标签: ssrs-2008

我正在尝试从报告的自定义代码中编写的函数访问REST服务。我不想将该代码移动到单独的程序集中,因此问题出在自定义代码周围,请不要将我发送到自定义程序集。

以下是代码:

Public Shared Function GetData(ByVal id As String) As String
    Dim strURL As String = ("http://..." & id)
    Dim webRequest As System.Net.HttpWebRequest = DirectCast(System.Net.WebRequest.Create(strURL), System.Net.HttpWebRequest)
        webRequest.Method = "Get"
        Dim webResponse As System.Net.HttpWebResponse = DirectCast(webRequest.GetResponse, System.Net.HttpWebResponse)
        Dim rdr As New System.IO.StreamReader(webResponse.GetResponseStream)
        Return rdr.ReadToEnd
End Function

当我使用它时,我收到错误:

System.Security.SecurityException: Request for the permission of type 'System.Net.WebPermission, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' failed.
at System.Security.CodeAccessSecurityEngine.Check(Object demand, StackCrawlMark& stackMark, Boolean isPermSet)
at System.Security.CodeAccessPermission.Demand()
at System.Net.HttpWebRequest..ctor(Uri uri, ServicePoint servicePoint)
at System.Net.HttpRequestCreator.Create(Uri Uri)
at System.Net.WebRequest.Create(Uri requestUri, Boolean useUriBase)
at System.Net.WebRequest.Create(String requestUriString)
at ReportExprHostImpl.CustomCodeProxy.GetData(String what, String id, String defaultValue)
The action that failed was:
Demand
The type of the first permission that failed was:
System.Net.WebPermission
The Zone of the assembly that failed was:
MyComputer

我想我可能也会遇到System.IO的未来问题。

我查看了CAS,我完全模糊了,我不知道我必须更改哪个政策文件,我必须更改哪些代码组以及如何更改。 我的理解是这是用于自定义代码的代码组(在rssrvpolicy.config中):

<CodeGroup 
     class="UnionCodeGroup"
     version="1"
     PermissionSetName="Execute"
     Name="Report_Expressions_Default_Permissions"
     Description="This code group grants default permissions for code in report expressions and Code element.>

                        <IMembershipCondition
                                class="StrongNameMembershipCondition"
                                version="1"
                                PublicKeyBlob="002400...CAEDDA2"
                        />
</CodeGroup>

但只是将PermissionSetName设置为Fulltrust不会做任何更改。

2 个答案:

答案 0 :(得分:1)

对于遇到此问题的任何人(事后一年半),如果您在尝试从BIDS查看报告时收到此异常,则需要更新Visual Studio的PrivateAssemblies目录中的RSPreviewPolicy.config文件

有三个安全策略文件需要修改才能用于此类用途(表达式或自定义程序集中的自定义代码。)详细说明(包括关于在何处放置新CodeGroup元素的一个非常重要的说明!!)可以在MSDN页面标题为(截至今天)“Using Reporting Services Security Policy Files”。安全配置文件是报表服务器配置(rssrvpolicy.config),报表管理器配置(rsmgrpolicy.config)和报表设计器配置(RSPreviewPolicy.config)。

对此的一个很好的测试是一次更新一个,并在每次更新后测试所有三个(当然,在将报告部署到报表服务器实例之后:)。

答案 1 :(得分:0)

您应该在代码组中尝试PermissionSetName =“FULLTRUST”。