2008-12-17 8 views
2

J'ai une partie web sharepoint personnalisé qui jette l'exception suivante:Sharepoint Webpart Exception sécurité

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 

Ma théorie est que Sharepoint n'a pas le niveau de confiance pour exécuter la partie Web, mais je difficulté trouver comment déboguer ce problème. Quelqu'un at-il une expérience de débogage de quelque chose comme ça?

Répondre

4

Vous disposez de plusieurs options. Le premier consiste à installer votre assembly dans le GAC. Il obtiendra alors entière confiance, mais vous devez l'installer dans le GAC, le nom fort, etc. La deuxième option est d'aller dans le web.config et l'ajouter à la liste de confiance. This article et this one vous aidera à aller dans ce sens.

La troisième option est de laisser tomber votre assemblage dans le répertoire C: \ inetpub \ wwwroot \ WSS \ VirtualDirectories [port] _app_bin dossier. Ceci est défini dans la configuration globale de SharePoint pour approuver entièrement les assemblages qui s'y trouvent. Vous pouvez essayer d'abord cela pour voir si cela aide, et si oui, utilisez l'une des deux autres méthodes (puisque techniquement c'est une fonctionnalité non documentée et pourrait être changé)

EDIT: Ok, il y a plusieurs choses tu peux essayer. Essayez d'augmenter le niveau de confiance global comme indiqué in this article. Fondamentalement chercher:

< niveau de confiance = « Full » originUrl = « »/>

Si cela fonctionne, il indique que vous comptez sur une DLL qui n'est pas digne de confiance. Notez que vous ne voulez pas le laisser avec le niveau de confiance Full, car cela signifie que toute partie Web a une confiance totale.

Cela aide-t-il?

+0

GAC-ing la DLL était la seule chose qui semblait fonctionner - cela a fonctionné cependant. – sestocker

2

C'est fou. Je ne peux pas exécuter la ligne suivante dans une partie web:

using (SPSite site = new SPSite(parentWebUrl)) 

Cependant, je peux exécuter ne pas utiliser des pièces Web.

Il me jette une exception similaire althought la DLL est dans le GAC plus sont ajoutés à 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 .... 

Il SAIS que

((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 

a lancé une exception.

Quel est le problème avec cela?

Solution

Il se trouve que de nombreuses erreurs fois comme thses se produisent parce que différentes actions se produisent dans le constructeur de webpart. Vous ne pouvez presque pas interagir avec le modèle d'objet SharePoint.

code Déplacer Somwhere autre et il pourrait fonctionner. J'ai déplacé mon code à CreateChildControls et cela a fonctionné.

Questions connexes