SSRS - Пользовательский код - PullRequest
2 голосов
/ 12 декабря 2011

Я пытаюсь получить доступ к службе 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 ]

1 голос
/ 27 марта 2013

Для тех, кто испытывает эту проблему (через полтора года после факта), если вы получаете это исключение при попытке просмотра отчета из BIDS, вам необходимо обновить файл RSPreviewPolicy.config в каталоге PrivateAssemblies Visual Studio. .

Существует три файла политики безопасности, которые необходимо изменить для такого использования (пользовательский код в выражении или пользовательские сборки.) Подробные примечания (в том числе очень важные о том, где размещать новые элементы CodeGroup !!) можно найти на Страница MSDN (на сегодняшний день) « Использование файлов политики безопасности служб Reporting Services ». К файлам конфигурации безопасности относятся конфигурация сервера отчетов (rssrvpolicy.config), конфигурация менеджера отчетов (rsmgrpolicy.config) и конфигурация дизайнера отчетов (RSPreviewPolicy.config).

Отличный тест для этого - обновлять по одному и тестировать все три после каждого обновления (конечно, после развертывания отчета на вашем экземпляре сервера отчетов:).

0 голосов
/ 19 июля 2012

Вы должны попробовать PermissionSetName = "FULLTRUST" в кодовой группе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...