Sharepoint Webpart Исключение безопасности - PullRequest
2 голосов
/ 17 декабря 2008

У меня есть пользовательская веб-часть sharepoint, которая выдает следующее исключение:

System.Security.SecurityException: Request for the permission of type 'Microsoft.SharePoint.Security.SharePointPermission, Microsoft.SharePoint.Security, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c' failed.
   at Microsoft.SharePoint.SPSecurity.RunWithElevatedPrivileges(CodeToRunElevated secureCode)
   at Waverly.SharePoint.Features.WebParts.SearchesListWebPart.Render(HtmlTextWriter writer)
The action that failed was:
Demand
The type of the first permission that failed was:
Microsoft.SharePoint.Security.SharePointPermission
The Zone of the assembly that failed was:
MyComputer

Моя теория состоит в том, что у Sharepoint нет уровня доверия для запуска веб-части, но мне трудно понять, как отладить эту проблему. У кого-нибудь есть опыт отладки чего-то подобного?

Ответы [ 2 ]

4 голосов
/ 17 декабря 2008

У вас есть несколько вариантов. Во-первых, установить вашу сборку в GAC. Затем он получит полное доверие, но вы должны установить его в GAC, строгое имя и т. Д. Второй вариант - перейти в файл web.config и добавить его в список доверенных. Эта статья и эта статья поможет вам пройти по этому пути.

Третий вариант - удалить вашу сборку в папку C: \ inetpub \ wwwroot \ wss \ VirtualDirectories [port] _app_bin. Это установлено в глобальной конфигурации SharePoint, чтобы полностью доверять любым сборкам там. Возможно, вы захотите попробовать это сначала, просто чтобы посмотреть, помогает ли это, и если это так, используйте один из двух других методов (поскольку технически это недокументированная функция, которую можно изменить)

РЕДАКТИРОВАТЬ: Хорошо, есть несколько вещей, которые вы можете попробовать. Попробуйте повысить общий уровень доверия, как показано в этой статье . В основном ищите:

Если это работает, то это означает, что вы полагаетесь на DLL, которая не является доверенной. Обратите внимание, что вы не хотите оставлять его с уровнем доверия Full, поскольку это означает, что любая веб-часть имеет полное доверие.

Это помогает?

2 голосов
/ 30 июня 2009

Это безумие. Я не могу выполнить следующую строку в веб-части:

using (SPSite site = new SPSite(parentWebUrl))

Однако я могу выполнить его, не используя веб-части.

Это вызывает у меня аналогичное исключение, хотя DLL находится в GAC, плюс добавлены в safecontrols.

Exception: SecurityException
Message: Request failed.
Action: System.Security.Permissions.SecurityAction.Demand
Some stack trace:
    at Microsoft.SharePoint.SPWeb.SPWebConstructor(SPSite site, String url, Boolean bExactWebUrl, SPRequest request)
    at Microsoft.SharePoint.SPWeb..ctor(SPSite site, String url, Boolean bExactWebUrl)
    at Microsoft.SharePoint.SPSite.OpenWeb()
    at ....

Это также говорит, что

((System.Security.SecurityException)($exception)).Demanded
((System.Security.SecurityException)($exception)).DenySetInstance
((System.Security.SecurityException)($exception)).FailedAssemblyInfo
((System.Security.SecurityException)($exception)).FirstPermissionThatFailed
((System.Security.SecurityException)($exception)).GrantedSet

бросил исключение.

В чем проблема?

Решение

Оказывается, что часто такие ошибки возникают, потому что в конструкторе веб-частей происходят различные действия. Вы почти не можете взаимодействовать с объектной моделью SharePoint там.

Переместите код куда-нибудь еще, и он может работать. Я переместил свой код в CreateChildControls, и он работал.

...