ApproximateMessageCount всегда имеет значение null после вызова FetchAttributesAsync в универсальном приложении Windows

Я делаю небольшое приложение, в котором должно быть указано количество элементов в моих очередях Azure. Когда я использую FetchAttributesAsync и ApproximateMessageCount в консольном приложении, я получаю ожидаемый результат в ApproximateMessageCount после вызова FetchAttributesAsync (или FetchAttributes).

Когда я использую то же самое в универсальном приложении для Windows, ApproximateMessageCount остается застрявшим на null после вызова FetchAttributesAsync (FetchAttributes там недоступен).

Код консоли:

        CloudStorageAccount _account;

        if (CloudStorageAccount.TryParse(_connectionstring, out _account))
        {
            var queueClient = _account.CreateCloudQueueClient();

            Console.WriteLine(" {0}", _account.QueueEndpoint);
            Console.WriteLine(" ----------------------------------------------");

            var queues = (await queueClient.ListQueuesSegmentedAsync(null)).Results;

            foreach (CloudQueue q in queues)
            {
                await q.FetchAttributesAsync();
                Console.WriteLine($" {q.Name,-40} {q.ApproximateMessageCount,5}");
            }
        }

Универсальный код приложения:

        IEnumerable<CloudQueue> queues;
        CloudStorageAccount _account;
        CloudQueueClient queueClient;

        CloudStorageAccount.TryParse(connectionstring, out _account);
        queueClient = _account.CreateCloudQueueClient();

        queues = (await queueClient.ListQueuesSegmentedAsync(null)).Results;

        foreach (CloudQueue q in queues)
        {
            await q.FetchAttributesAsync();

            var count = q.ApproximateMessageCount;

            // count is always null here!!!
        }

Я пробовал всевозможные альтернативы, такие как Wait() и тому подобное в ожидаемых. Что бы я ни пытался, ApproximateMessageCount всегда остается null :-(.

Я что-то упускаю?


person Ferenc Németh    schedule 03.08.2015    source источник


Ответы (1)


Я думаю, вы обнаружили ошибку в клиентской библиотеке хранилища. Я посмотрел код на Github и, по сути, вместо чтения значения для заголовка Approximate Message Count код считывает значение для заголовка Lease Status.

В классе QueueHttpResponseParsers.cs :

    public static string GetApproximateMessageCount(HttpResponseMessage response)
    {
        return response.Headers.GetHeaderSingleValueOrDefault(Constants.HeaderConstants.LeaseStatus);
    }

Этот метод должен был быть:

    public static string GetApproximateMessageCount(HttpResponseMessage response)
    {
        return response.Headers.GetHeaderSingleValueOrDefault(Constants.HeaderConstants.ApproximateMessagesCount);
    }

Я отправил сообщение об ошибке для этого: https://github.com/Azure/azure-storage-net/issues/155.

person Gaurav Mantri    schedule 03.08.2015