CreateDocumentCollectionIfNotExistsAsync并不总是有效

时间:2017-07-08 22:29:29

标签: c# azure azure-cosmosdb

我正在尝试创建一个不存在的集合。

首先,我通过以下方式创建我的DocumentClient:

public DocumentClient CreateClient(ConnectionPolicy connectionPolicy = null)
{
   return new DocumentClient(new Uri(this.AccountEndpoint), this.AccountKey, connectionPolicy);
}

现在我有了我的文档客户端(让我们称之为documentDbClient),我尝试使用CreateDocumentCollectionIfNotExistsAsync

var documentDbClient = dbConnection.CreateClient();

await documentDbClient.CreateDocumentCollectionIfNotExistsAsync(UriFactory.CreateDatabaseUri("mydatabase"),
            new DocumentCollection { Id = "testcollection" });

现在,我希望这会在名为testcollection的数据库下创建一个名为mydatabase的集合。然而,没有任何反应。没有创建集合,也没有抛出异常。

我想也许它只是很慢,所以我等了30分钟然后回到门户网站,看看我的收藏是否已经制作好......

它没有。

有什么问题?

更新

好的,所以我发现如果我改变我试图创建的集合的名称,它就可以了。我之前已经多次创建和删除了该集合,现在看来Azure无法在90%的时间内创建它。

2 个答案:

答案 0 :(得分:2)

因此,在重复创建和销毁集合时,您可能会遇到限制情况。以下是FAQ的表API部分的摘录(同样适用于文档集合):

  

检测并限制表的快速创建速度。我们   建议您查看表的创建速率并降低它   每分钟少于5个。

当前的节流速率为5次创建/分钟。因此,对于单元测试场景,您需要解决此问题(例如,保留集合,但在每次测试运行后只清空其内容)。

注意:我已通知产品团队,油门提及仅在表API部分中提及,并相应地更新常见问题解答。

答案 1 :(得分:1)

您应该在数据库创建的末尾添加一个.Wait(),然后再创建集合。这将等待两个任务完成。

_client.CreateDatabaseIfNotExistsAsync(new Database { Id = "dbName" }).Wait();

_client.CreateDocumentCollectionIfNotExistsAsync(UriFactory.CreateDatabaseUri("dbName"), new DocumentCollection { Id = "collectionName" }).Wait();