如何使用web服务在SharePoint 2010中创建新的子网站?

如何使用web服务在SharePoint 2010中创建新的子网站?,sharepoint,Sharepoint,在SharePoint 2010中,网站web服务中有一个新方法CreateWeb,用于创建新的SharePoint子网站。然而,它有很多问题——至少这是我的经验。以下是正确使用web服务及其方法的代码: Uri site = new Uri("http://sp2010site/"); string webServicePath = "_vti_bin/Sites.asmx"; string webServiceUrl = Path.Combine(site.AbsoluteUri, web

在SharePoint 2010中,网站web服务中有一个新方法CreateWeb,用于创建新的SharePoint子网站。然而,它有很多问题——至少这是我的经验。以下是正确使用web服务及其方法的代码:

Uri site = new Uri("http://sp2010site/"); 
string webServicePath = "_vti_bin/Sites.asmx";
string webServiceUrl = Path.Combine(site.AbsoluteUri, webServicePath);

Sites webService = new Sites();
webService.Credentials = CredentialCache.DefaultNetworkCredentials;
webService.Url = webServiceUrl;

//the following line creates the sub site
string result = webService.CreateWeb("newsite", "New Site", "Site desc", "STS#0", 
    1033, true, 1033, true, 1033, true, true, true, true, true, true, true);
如果发生错误,例如地址为newsite的子站点已经存在,或者指定的模板不存在,则以下代码将返回Soap异常

如果一切正常,将触发InvalidOperation异常,消息为XML文档1310中存在错误,但该站点实际上已创建

如果一切正常,但我使用自己的解决方案而不是非默认的SharePoint模板(如团队网站,即STS0),我会得到一个Soap异常,并且不会创建网站


到目前为止,这是一次可怕的经历。请在SP 2010中发布您创建子站点的经验,更好的是,如果您有任何问题,请发布您的解决方案。干杯

SP2010 beta中的步骤从[自定义]模板创建[子]站点:

激活你的网站模板 浏览至betasoftwaresucks/_layouts/templatepick.aspx 单击“自定义”选项卡。您应该能够看到您的模板 打开一个可以检查DOM的工具,例如IE开发者工具或Firebug。DOM是动态修改的,因此仅查看HTML是不起作用的,除非您对默认选中选项卡中的一个默认模板感兴趣。 查找表示模板的option元素的值。它看起来像{guid}templatename。确保“自定义”选项卡仍处于打开状态,否则您可能无法找到此选项卡。 将该值用作CreateWeb的模板参数。
[我手动滚动SP SOAP,因此查看完整的请求和响应非常简单。]

是的,没错,模板字符串参数应该作为{site\u guid}模板名称提供。然而,每当我调用CreateWeb方法并且站点确实被创建时,仍然会触发InvalideExceptio。因此,问题依然存在。您是否能够使用CreateWeb方法创建一个没有任何异常的站点?这真是个累赘。。。我知道它是测试版,但还是…:在这里很好用。我们确实有一个网站模板加载失败的问题,但在正常机制下也无法加载。希望您能找到解决方案。InvalideException触发是Microsoft确认的错误。嗯,我希望他们能在SharePoint 2010的官方版本中解决这个问题。
SharepointSiteService.Sites siteWS = new SharepointSiteService.Sites();
                                siteWS.Credentials = new System.Net.NetworkCredential("user1", "password", "domain");
try 
{

                                            SharepointSiteService.Template[] templates;
                                            siteWS.GetSiteTemplates(1033, out templates);
                                            SharepointSiteService.Template template = (from SharepointSiteService.Template t
                                            in templates
                                                                                       where t.Title == "Test Template"
                                                                                       select t).FirstOrDefault();

siteWS.CreateWeb("<parent web name>" + "/" + <sub web name>" + "/" + <sub web name>", "Test web", "Test Web", template.Name, 1033, true, 1033, true, 1033, true, false, false, false, false, false, false); 
}
catch (Microsoft.SharePoint.SoapServer.SoapServerException e)
{
                                        System.Diagnostics.EventLog.WriteEntry("SharePoint Foundation", "soap exception" + e.Detail + e.Message + e.Source + e.Node);
}
catch (Exception ex)
{
                                        System.Diagnostics.EventLog.WriteEntry("SharePoint Foundation", "Site Created");
                                        System.Diagnostics.EventLog.WriteEntry("SharePoint Foundation", ex.Message + ex.Source + ex.StackTrace);
 }