在通用 windows 应用程序中调用 FetchAttributesAsync 后,ApproximateMessageCount 始终为 null
ApproximateMessageCount always null after calling FetchAttributesAsync in a Universal windows App
我正在制作一个小应用程序,它应该列出我的 Azure 队列中的项目数。
当我在控制台应用程序中使用 FetchAttributesAsync 和 ApproximateMessageCount 时,我在调用 FetchAttributesAsync(或 FetchAttributes)后在 ApproximateMessageCount 中得到了预期的结果。
当我在通用 Windows 应用程序中使用相同的应用程序时,ApproximateMessageCount 在调用 FetchAttributesAsync 后仍然停留在 null
(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
的决心:-(。
我是不是漏掉了什么?
我认为您发现了存储客户端库中的错误。我查看了 Github 上的代码,实际上代码不是读取 Approximate Message Count
header 的值,而是读取 Lease Status
header.[= 的值17=]
在QueueHttpResponseParsers.cs
class:
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。
我正在制作一个小应用程序,它应该列出我的 Azure 队列中的项目数。 当我在控制台应用程序中使用 FetchAttributesAsync 和 ApproximateMessageCount 时,我在调用 FetchAttributesAsync(或 FetchAttributes)后在 ApproximateMessageCount 中得到了预期的结果。
当我在通用 Windows 应用程序中使用相同的应用程序时,ApproximateMessageCount 在调用 FetchAttributesAsync 后仍然停留在 null
(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
的决心:-(。
我是不是漏掉了什么?
我认为您发现了存储客户端库中的错误。我查看了 Github 上的代码,实际上代码不是读取 Approximate Message Count
header 的值,而是读取 Lease Status
header.[= 的值17=]
在QueueHttpResponseParsers.cs
class:
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。