Cosmos DB: коллекция существует, но выдается код httpstatus 410 GONE - PullRequest
0 голосов
/ 11 мая 2018

У меня есть код, который проверяет, существует ли коллекция при запуске моего приложения.

однако код для проверки:

await client.ReadDocumentCollectionAsync(UriFactory.CreateDocumentCollectionUri(DatabaseId, collectionId));

вызывает исключение DocumentClientException с кодом состояния HTTP 410 GONE.

однако, когда я использую свой проводник данных, я вижу, что коллекция с предоставленным мною collectionId существует. Далее, я попытался сделать следующее в тесте:

try
{
    await client.ReadDocumentCollectionAsync(UriFactory.CreateDocumentCollectionUri(DatabaseId, collectionId));
}
catch (DocumentClientException e)
{

    if (e.StatusCode == System.Net.HttpStatusCode.NotFound || e.StatusCode == System.Net.HttpStatusCode.Gone)
    {
        var collection = new DocumentCollection { Id = collectionId, ResourceId = collectionId };
        await client.CreateDocumentCollectionAsync(
            UriFactory.CreateDatabaseUri(DatabaseId),
            collection,
            new RequestOptions { OfferThroughput = 1000 });
    }
    else
    {
        throw;
    }
}

Этот код по-прежнему вызывает исключение DocumentClientException с кодом состояния 410. Однако, когда я пытаюсь создать коллекцию документов, происходит сбой с Resource with specified id or name already exists

я неправильно выполняю поиск? Я создал коллекцию вручную, так что, возможно, collectionID отличается, но кажется странным, я не могу установить идентификатор коллекции документов вне кода.

1 Ответ

0 голосов
/ 11 мая 2018

Я бы порекомендовал использовать DocumentCollectionQuery, чтобы проверить, существует он или нет. ReadDocumentCollectionAsync не совсем то же самое.

Вы можете проверить, как это делается в Cosmosnaut CosmosCollectionCreator.cs .

Просто запрос с использованием

var collection = _documentClient
            .CreateDocumentCollectionQuery(database.SelfLink)
            .ToArray()
            .FirstOrDefault(c => c.Id == collectionName);

, а затем создайте его с помощью

collection = await _documentClient.CreateDocumentCollectionAsync(database.SelfLink, collection, new RequestOptions
        {
            OfferThroughput = collectionThroughput
        });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...