代码之家  ›  专栏  ›  技术社区  ›  Jazza

如何通过SharePoint对象模型创建托管路径

  •  2
  • Jazza  · 技术社区  · 17 年前

    这是一个WSS/SharePoint专家的问题。

    
    Dim _ClientSiteUrl As String = "http://myintranet/clients/sampleclient"
    
            Using _RootWeb As SPSite = New SPSite("http://myintranet")
    
                Dim _ManagedPaths As SPPrefixCollection = _RootWeb.WebApplication.Prefixes
    
                If Not (_ManagedPaths.Contains(_ClientSiteUrl)) Then
    
                    _ManagedPaths.Add(_ClientSiteUrl, SPPrefixType.ExplicitInclusion)
    
                End If
    
            End Using
    
    

    此代码失败,SPUtility.ValidateFormDigest()上出现NullReferenceException。研究表明,这可能是由于权限不足,我尝试使用SPSecurity.RunWithElevatedPrivileges(AddManagedPath的地址)在提升的权限块中运行代码,其中AddManagedPath是包含上述代码示例的子过程。

    我哪里做错了?

    我已经设法解决的一个方法是通过Process.Start()调用STSADM.EXE,提供必要的参数,这是可行的。

    更新:

    更新: 我认为问题肯定与没有在正确的SharePoint安全上下文中运行web服务有关。我决定采用我建议的解决方法,并将其外包给STSADM,尽管要做到这一点,web服务运行所依据的应用程序池标识必须是SharePoint管理员的成员。

    3 回复  |  直到 17 年前
        1
  •  1
  •   Nat    17 年前

    使现代化

    SPSecurity.RunWithElevatedPrivileges:通常,SharePoint web应用程序中的代码以执行操作的用户的权限执行。RunWithElevatedPrivileges在SharePoint web应用程序池帐户的上下文中运行代码(我认为) MSDN 我们可以再详细一点。

    尝试更改web服务应用程序池的用户,看看这是否带来了乐趣。


    这可能是权限问题。 也许可以试试:

    Dim clientSiteUrl As String = "http://myintranet/clients/sampleclient"
    Using SPSite = new SPSite(clientSiteUrl) 
        webApp As SPWebApplication = SPWebApplication.Lookup(new Uri(clientSiteUrl));
        If Not (webApp.Prefixes.Contains(clientSiteUrl)) Then
            webApp.Prefixes.Add(clientSiteUrl, SPPrefixType.ExplicitInclusion)
        End If
    End Using
    

        2
  •  1
  •   stealthyninja michkra    14 年前

    using (SPSite site = new SPSite("http://dev-moss07-eric/PathHere")) {
        SPWebApplication webApp = SPWebApplication.Lookup(new Uri("http://dev-moss07-eric"));
        if (webApp.Prefixes.Contains("PathHere"))
        {
            //
        }
        else
        {
            webApp.Prefixes.Add("PathHere", SPPrefixType.ExplicitInclusion);
        }
    }
    

        3
  •  0
  •   Eric Schrader    15 年前

    如果要在该路径上创建托管路径(显式)和网站集,请执行以下操作:

    using (SPSite site = new SPSite("http://dev-moss07-eric")) {
                    SPWebApplication webApp = SPWebApplication.Lookup(new Uri("http://dev-moss07-eric"));
                    if (webApp.Prefixes.Contains("ManagedPathHere"))
                    {
                        //
                    }
                    else
                    {
                        webApp.Prefixes.Add("ManagedPathHere", SPPrefixType.ExplicitInclusion);
                    }
                    using (SPWeb web = site.OpenWeb())
                    {
                        SPWebApplication webApplication = web.Site.WebApplication;
                        try
                        {
                            webApplication.Sites.Add("ManagedPathHere","Site Title Here","This site is used for hosting styling assets.", 1033, "STS#1", "6scdev\\eric.schrader", "Eric Schrader", "eric.schrader@6sc.com");
                        }
                        catch (Exception ex)
                        {
                            //ex.ToString;
                        }
                    }
                }
    
    推荐文章