2011-01-21 2 views
0

Salut Je suis en train de créer la collection de sites dans l'application Web qui est configuré comme l'authentification basée sur la revendication et le code est le suivant:collection Ajout de site Web d'application connecté comme FBA dans SharePoint 2010

SPSecurity.RunWithElevatedPrivileges(delegate { 
    using (SPSite site = SPContext.Current.Site) 
    { 
    using (SPWeb web = site.RootWeb) 
    { 
     site.AllowUnsafeUpdates = true; 
     web.AllowUnsafeUpdates = true; 
     try 
     { 
     SPWebApplication web_App = web.Site.WebApplication; 
     web_App.Sites.Add(SiteUrl, SiteTitle, Description, Convert.ToUInt32(Constants.LOCALE_ID_ENGLISH), SiteTemplate, OwnerLogin, "testuser", OwnerEmail); 
     } 
     catch (Exception ex) 
     { 
     string s = ex.Message + " " + ex.StackTrace; 
     throw; 
     } 
     finally 
     { 
     web.AllowUnsafeUpdates = false; 
     site.AllowUnsafeUpdates = false; 
     } 
    } 
    } 
}); 

ici Je passe "OwnerLogin" en tant que "CustomMembership: UserName". Mais web_App.Sites.Add lance une erreur wierd comme "ex = {Impossible d'évaluer l'expression car le code est optimisé ou une image native est au-dessus de la pile d'appels." Toute aide à cet égard est vraiment appréciée.
Cordialement,
Paddy

+0

Je ne pense pas que ce soit la racine du problème ici, mais vous devriez ne pas disposer de l'objet 'SPSite' renvoyé par la propriété' SPContext.Current.Site' (ie supprimer le 1er 'using') - http://blogs.msdn.com/b/rogerla/archive/2008/02/12/sharepoint -2007-et-wss-3-0-disposer-patterns-par-exemple.aspx # SPDisposeCheckID_220 –

+0

Son appelé à partir d'une page ASPX qui se trouve dans le dossier _layouts. Paddy – Paddy

Répondre

1

Votre code d'élévation est erroné, vous devez créer complètement nouvelles références SPSite et SPWeb. Je normal les préfixer avec "c" pour me montrer que c'est dans un contexte différent.

SPSecurity.RunWithElevatedPrivileges(delegate() { 
    using (SPSite csite = new SPSite(SPContext.Current.Site.ID)) { 
     using (SPWeb cweb = csite.OpenWeb(SPContext.Current.Site.RootWeb.ID)) { 
      //do stuff 
     } 
    } 
}); 
0

Le paramètre OwnerLogin devrait pas contenir le CustomMembership: préfixe - comme une valeur de ce paramètre passe simple UserName.


Par ailleurs, votre méthode pour obtenir l'objet Application Web est inutilement compliqué - utiliser quelque chose comme ceci:

SPWebApplication webApplication = SPWebApplication.Lookup(new System.Uri("Web-Application-URL")); 
+0

Merci Marek pour ces conseils. Mais le problème persiste toujours. J'ai suivi toutes les suggestions faites sur ces Questions, mais aucune ne me convient. J'essaie toujours de trouver une solution. – Paddy

+0

@Paddy (1) Ce fil http://social.technet.microsoft.com/Forums/en-US/sharepoint2010programming/thread/51ad553a-ec7b-46b6-873c-d49b2544c55f/ contient une discussion détaillée d'un problème similaire - il peut vous donner quelques idées. (2) Avez-vous envisagé d'utiliser le service Web d'administration http://msdn.microsoft.com/en-us/library/websvcadmin.admin.createsite.aspx? J'utilise un service Web pour créer des collections de sites sous FBA Web Application et cela fonctionne très bien. –

+0

@Paddy Après quelques recherches et tests, je commence à penser qu'il n'est pas possible de créer une nouvelle collection de sites directement à partir d'une page '.aspx' placée dans le dossier' _layouts' **. Il nécessite probablement certains privilèges que les utilisateurs de la collection de sites (FBA ou non, ce n'est pas grave) n'ont pas - administrateur de la ferme peut-être? À mon avis, vous devez utiliser le service Web Administration intégré ou en créer un personnalisé (rappelez-vous qu'il doit être déployé dans le dossier 'ADMISAPI'). –

Questions connexes