来自两个不同站点的SPSite

时间:2010-08-16 14:34:49

标签: sharepoint sharepoint-2007

如果网站集的网址位于两个不同的网站(例如http://mysite/Docs1/http://mysite/subsite/Docs2/),我在访问SPSite对象的两个不同实例中的对象时遇到问题。请考虑以下代码:

public static void MoveDocument(Uri sourceUrl, Uri destinationUrl)
{
    string sUrl = sourceUrl.ToString();
    string dUrl = destinationUrl.ToString();

    using (SPSite sourceSite = new SPSite(sUrl))
    using (SPSite destinationSite = new SPSite(sUrl))
    {
        SPWeb sourceWeb = sourceSite.OpenWeb();
        SPWeb destinationWeb = destinationSite.OpenWeb();
        SPFile sourceFile = sourceWeb.GetFile(sUrl);
        SPFolder destinationFolder = destinationWeb.GetFolder(dUrl);

        MoveDocument(sourceFile.ParentFolder, destinationFolder, sourceFile.Name);
    }
}

在上面的代码中,如果我尝试初始化与源网站位于不同站点的SPFolder,则会失败,因为SharePoint会尝试在与sourceSite相同的站点内而不是destinationSite中查找。

目的是能够提供将文件从一个文档库移动到另一个文档库的能力(无论是否在同一网站集中)。

我做错了什么?

2 个答案:

答案 0 :(得分:4)

您使用相同的网址打开SPSites

using (SPSite sourceSite = new SPSite(sUrl))
using (SPSite destinationSite = new SPSite(sUrl))

您是否尝试过MSDN文章? http://msdn.microsoft.com/en-us/library/ms470176.aspx

答案 1 :(得分:2)

除了上面的正确答案之外,你绝对应该处理你的SPWeb对象:

public static void MoveDocument(Uri sourceUrl, Uri destinationUrl)
{
    string sUrl = sourceUrl.ToString();
    string dUrl = destinationUrl.ToString();

    using (SPSite sourceSite = new SPSite(sUrl))
    using (SPSite destinationSite = new SPSite(dUrl))
    using (SPWeb sourceWeb = sourceSite.OpenWeb())
    using (SPWeb destinationWeb = destinationSite.OpenWeb())
    {
        SPFile sourceFile = sourceWeb.GetFile(sUrl);
        SPFolder destinationFolder = destinationWeb.GetFolder(dUrl);

        MoveDocument(sourceFile.ParentFolder, destinationFolder, sourceFile.Name);
    }
}