Azure DocumentDB所有者资源不存在

时间:2017-04-21 20:17:02

标签: azure azure-cosmosdb

我有同样的错误icrosoft.Azure.Documents.DocumentClientException:消息:{"错误":["所有者资源不存在"]},这是我的方案。当我将我的webapp部署到Azure并尝试从docDb获取一些文档时,它会抛出此错误。 docdb存在于azure中,包含我要查找的文档。

奇怪的是,从我的本地机器(从VS运行),这工作正常。我在Azure和本地使用相同的设置。有人对此有所了解。

由于

4 个答案:

答案 0 :(得分:13)

  

所有者资源不存在

如果您提供了错误的数据库名称,则会发生

例如,在使用client.readDocument(..)读取文档时,客户端为DocumentClient实例,docLink中给出的数据库名称错误。

答案 1 :(得分:2)

我遇到了同样的问题。我发现Visual Studio 2017使用我的Release配置而不是我选择的Test配置进行发布。 在我的情况下,Release配置具有不同的CosmosDB数据库名称,这导致我发布到Azure测试服务器时出现“所有者资源不存在”错误。超级沮丧和可怕的错误信息。

答案 2 :(得分:1)

这个错误肯定与读取不存在的数据库/集合/文档有关。对于确实存在的数据库,我得到了相同的确切错误,但是我将名称输入为小写,无论您的分区键是什么,都会出现此错误。

我现在能提出的最佳解决方案是包装

var response = await client.ReadDocumentAsync(UriFactory.CreateDocumentUri(database, collection, "documentid"));

调用try catch,不是很优雅,我宁愿回复更多细节,但这是微软的。

像下面这样的东西可以解决问题。

                Model myDoc = null;

                try
                {
                    var response = await client.ReadDocumentAsync(UriFactory.CreateDocumentUri(database, collection, document));
                    myDoc = (Model )(dynamic)response.Resource;
                }
                catch { }


                if (myDoc != null)
                {
                   //do your work here
                }

这是为了更好地了解错误,然后创建缺少的资源,这样你就不会再得到错误了。

在得出这个结论之前我必须经历的一些资源: https://github.com/DamianStanger/DocumentDbDemo

Azure DocumentDB Read Document Resource Not Found

答案 3 :(得分:0)

这也可能是由于找不到文档附件引起的。 当您使用Azure Cosmos DB Data Migration tool移动cosmos db内容时,这是常见的情况,这将移动所有具有完整定义的文档,但不幸的是,不是真正的附件内容。

因此,此结果导致文档中声明其具有附件,并且还声明了附件链接,但是在该给定链接处找不到附件,因为该工具尚未移动附件。

现在,我将代码包装如下

try{
    var attachments = client.CreateAttachmentQuery(attacmentLink, options);
    [...]
}
catch (DocumentClientException ex)
{
    throw new Exception("Cannot retrieve attachment of document", ex);
}

对正在发生的事情有有意义的提示。