导入期间出现EPiServer错误:System.ArgumentException:不能与目标相同

时间:2016-11-28 16:57:51

标签: episerver

我正在尝试将内容从我们的UAT服务器导入我们的生产服务器。

生产数据库最初是从UAT数据库克隆的,两个代码库都是相同的。

我的导出/导入过程非常简单,首先:http://screencast.com/t/UkT1W7t7g

然后我收到UAT中所有内容的最终文件(7MB +),然后我转到Production并选择以下内容:http://screencast.com/t/UkT1W7t7g

点击导入时出现以下错误:http://screencast.com/t/lgr7jeFX

这是我在错误日志中得到的:

2016-11-28 10:31:04,995 [5] ERROR EPiServer.Core.Transfer.TransferLogger: 10.5.3 Export/import error: Exception: Cannot be the same as destination
Parameter name: contentLinkID
System.ArgumentException: Cannot be the same as destination
Parameter name: contentLinkID
at EPiServer.DataAccess.ContentSaveDB.Move(Int32 contentLinkID, Int32 destinationLinkID, Boolean archive)
at EPiServer.DataAbstraction.ContentStore.Move(Int32 contentLink, Int32 destinationLinkID, Boolean archive)
at EPiServer.DefaultContentProvider.Move(ContentReference contentReference, ContentReference destinationLink)
at EPiServer.Core.Transfer.ContentTransfer.MoveContent(IContent content, ContentReference parentLink, AccessLevel requiredDestinationAccess)
at EPiServer.Core.Transfer.ContentTransfer.Import(RawContent rawContent, AccessLevel requiredDestinationAccess, Guid& importedPageGuid)
at EPiServer.Core.Transfer.ContentTransfer.Import(ITransferContentData content, AccessLevel requiredDestinationAccess)
at EPiServer.Enterprise.DataImporter.ImportContents[T](XmlTextReader reader, ZipPackage package)
at EPiServer.Enterprise.DataImporter.ImportStream(ZipPackage package, XmlTextReader reader, String partName)
at EPiServer.Enterprise.DataImporter.ImportPartOfPackage(ZipPackage package, String partName)
at EPiServer.Enterprise.DataImporter.ImportRaw(ZipPackage package)
at EPiServer.Enterprise.DataImporter.Import()
System.ArgumentException: Cannot be the same as destination
Parameter name: contentLinkID
at EPiServer.DataAccess.ContentSaveDB.Move(Int32 contentLinkID, Int32 destinationLinkID, Boolean archive)
at EPiServer.DataAbstraction.ContentStore.Move(Int32 contentLink, Int32 destinationLinkID, Boolean archive)
at EPiServer.DefaultContentProvider.Move(ContentReference contentReference, ContentReference destinationLink)
at EPiServer.Core.Transfer.ContentTransfer.MoveContent(IContent content, ContentReference parentLink, AccessLevel requiredDestinationAccess)
at EPiServer.Core.Transfer.ContentTransfer.Import(RawContent rawContent, AccessLevel requiredDestinationAccess, Guid& importedPageGuid)
at EPiServer.Core.Transfer.ContentTransfer.Import(ITransferContentData content, AccessLevel requiredDestinationAccess)
at EPiServer.Enterprise.DataImporter.ImportContents[T](XmlTextReader reader, ZipPackage package)
at EPiServer.Enterprise.DataImporter.ImportStream(ZipPackage package, XmlTextReader reader, String partName)
at EPiServer.Enterprise.DataImporter.ImportPartOfPackage(ZipPackage package, String partName)
at EPiServer.Enterprise.DataImporter.ImportRaw(ZipPackage package)
at EPiServer.Enterprise.DataImporter.Import()

我不知道问题可能是什么,非常感谢任何帮助。

P.D。:我已经在EPiServer Dev Forum http://world.episerver.com/forum/developer-forum/-Episerver-75-CMS/Thread-Container/2016/11/error-during-import-system-argumentexception-cannot-be-the-same-as-destination

上问了同样的问题

3 个答案:

答案 0 :(得分:1)

认为这是怎么回事?

您导出的软件包将在导入时选择的节点下面导入 - 而不是覆盖所选的目标节点。

例如,您可以在UAT中的根页下导出起始页,然后选择Root作为生产中的目标。导入时,起始页面将低于 Root页面。

在UAT环境中导出Root页面,然后尝试将导出到生产环境中的Root页面时,会发生错误。

基本上,您正在尝试导入目标根页面下的源根页(因此有关内容ID与目标ID相同的例外情况)。

答案 1 :(得分:1)

感谢explanation Ted。我做了以下工作并且有效:

在UAT

导出开始:http://screencast.com/t/FgHRnOhuauR使用"导出页面链接到的文件"未选中状态。

导出结束:http://screencast.com/t/aPe0Ntvb9aq

将10583个内容项导出到文件中。

然后在制作

导入开始:http://screencast.com/t/qqkBsL731P使用"更新匹配ID&#34的现有内容项;检查。

导入正在进行中:http://screencast.com/t/reSfMnCV8

我注意到的一件事是,最后它说它只更新了一部分内容项,实际上我做了几次,因为UAT正在被积极编辑并获得28,16,1或者结果导入的8个项目(10500+以上)我想这是因为那些是唯一的变更或新项目。

我确实检查了几个我知道已更新的块,并在导入后与新版本匹配。

正如我所做的那样,我将Ted´s answer标记为已被接受。

我认为有点混淆了内容树中元素的选择,因为我想从root获取所有内容并将其移动到另一台服务器上的根目录,但似乎不是它的工作方式。

答案 2 :(得分:0)

当contentLinkID等于destinationLinkID

时,会发生该错误

反映的代码确认了这个

public void Move(int contentLinkID, int destinationLinkID, bool archive)
{
    if (contentLinkID == destinationLinkID)
    {
        throw new ArgumentException("Cannot be the same as destination", "contentLinkID");
    }
// ...

检查您的episerver日志文件,他们会告诉您导致错误的contentLinkID。

最好的猜测是

  1. 应用程序池帐户在数据库或文件系统上没有足够的权限
  2. 应用程序池无法在app_data中编写或更新文件
  3. 通常这是大多数人放弃的地方,而是使用数据库备份/恢复来迁移Episerver。但是,如果你真的想对此进行全面讨论,我建议自定义导入,请查看Patrick van Kleef关于内容迁移的文章http://www.patrickvankleef.com/2015/08/18/episerver-content-migration/

    Episerver确实应该尽快解决这个问题!