2

我有一个引发以下异常的自定义共享点 Web 部件:

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 没有运行 Web 部件的信任级别,但我很难弄清楚如何调试这个问题。有人有调试这样的经验吗?

4

2 回答 2

4

您有几种选择。首先是将您的程序集安装到 GAC 中。然后它将获得完全信任,但您必须将其安装在 GAC 中,对其进行强命名等。第二个选项是进入 web.config 并将其添加到受信任列表中。这篇文章这篇文章将帮助你走上这条路。

第三个选项是将您的程序集放在 C:\inetpub\wwwroot\wss\VirtualDirectories[port]_app_bin 文件夹中。这是在全局 SharePoint 配置中设置的,以完全信任其中的任何程序集。您可能想先尝试一下,看看它是否有帮助,如果有帮助,请使用其他两种方法之一(因为从技术上讲,这是一个未记录的功能,可以更改)

编辑:好的,您可以尝试几件事。尝试提高整体信任级别,如本文所示。基本上寻找:

<trust level="Full" originUrl="" />

如果可行,则表明您依赖的 DLL 不受信任。请注意,您不希望将其保留为完全信任级别,因为这意味着任何 Web 部件都具有完全信任。

这有帮助吗?

于 2008-12-17T18:25:20.017 回答
2

这太疯狂了。我无法在 Web 部件中执行以下行:

using (SPSite site = new SPSite(parentWebUrl))

但是我可以不使用 Web 部件来执行它。

尽管 DLL 在 GAC 中,但它给我带来了类似的异常,并且被添加到了安全控件中。

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

抛出异常。

那有什么问题?

解决方案

事实证明,由于 webpart 构造函数中发生了各种操作,因此发生很多次这样的错误。您几乎无法与那里的 SharePoint 对象模型进行交互。

将代码移到其他地方,它可以工作。我将我的代码移动到 CreateChildControls 并且它有效。

于 2009-06-30T07:05:33.323 回答