Microsoft.WindowsAzure.Storage.StorageException - 服务器正忙

sim*_*tby 7 .net c# azure azure-table-storage

  • 语言:C#
  • 框架:.NET 4.5
  • Nuget:WindowsAzure.Storage 版本 8.0.1

你好。

Microsoft.WindowsAzure.Storage.StorageException在生产站点的日志中时不时地看到一条消息告诉我“服务器正忙”。有谁有关于如何摆脱这种行为的经验或专业提示。我是否应该更改 Azure 门户中的某些设置或对我的代码执行某些操作?

public static IEnumerable<MessageEntity> Get(string sentTo)当调用下面示例中的时,会发生错误。

代码:

private static CloudTable GetMessageTable()
{
    var storageAccount = CloudStorageAccount.Parse(CloudConfigurationManager.GetSetting("StorageConnectionString"));
    var tableClient = storageAccount.CreateCloudTableClient();
    var table = tableClient.GetTableReference(CloudConfigurationManager.GetSetting("MessageTable"));

    try
    {
        if (!table.Exists())
            table.Create();
    }
    catch (Exception e)
    {
        // Log err
    }

    return table;
}

public static IEnumerable<MessageEntity> Get(string sentTo)
{
    var table = GetMessageTable();
    var query = new TableQuery<MessageEntity>().Where(TableQuery.GenerateFilterCondition("PartitionKey", QueryComparisons.Equal, sentTo));

    var result = table.ExecuteQuery(query);
    return result.OrderByDescending(r => r.SentDate);
}
Run Code Online (Sandbox Code Playgroud)

日志:

Microsoft.WindowsAzure.Storage.StorageException: The remote server returned an error: (503) Server Unavailable. ---> System.Net.WebException: The remote server returned an error: (503) Server Unavailable.
   at System.Net.HttpWebRequest.GetResponse()
   at Microsoft.WindowsAzure.Storage.Core.Executor.Executor.ExecuteSync[T](RESTCommand`1 cmd, IRetryPolicy policy, OperationContext operationContext) in c:\Program Files (x86)\Jenkins\workspace\release_dotnet_master\Lib\ClassLibraryCommon\Core\Executor\Executor.cs:line 677
   --- End of inner exception stack trace ---
   at Microsoft.WindowsAzure.Storage.Core.Executor.Executor.ExecuteSync[T](RESTCommand`1 cmd, IRetryPolicy policy, OperationContext operationContext) in c:\Program Files (x86)\Jenkins\workspace\release_dotnet_master\Lib\ClassLibraryCommon\Core\Executor\Executor.cs:line 604
   at Microsoft.WindowsAzure.Storage.Table.TableQuery`1.<>c__DisplayClass7.<ExecuteInternal>b__6(IContinuationToken continuationToken) in c:\Program Files (x86)\Jenkins\workspace\release_dotnet_master\Lib\ClassLibraryCommon\Table\TableQuery.cs:line 430
   at Microsoft.WindowsAzure.Storage.Core.Util.CommonUtility.<LazyEnumerable>d__0`1.MoveNext() in c:\Program Files (x86)\Jenkins\workspace\release_dotnet_master\Lib\Common\Core\Util\CommonUtility.cs:line 322
   at System.Linq.Buffer`1..ctor(IEnumerable`1 source)
   at System.Linq.OrderedEnumerable`1.<GetEnumerator>d__1.MoveNext()
   at System.Linq.Enumerable.Count[TSource](IEnumerable`1 source, Func`2 predicate)
   at *** removed ***
Request Information
RequestID:*** removed ***
RequestDate:Tue, 11 Apr 2017 15:30:30 GMT
StatusMessage:Service Unavailable
ErrorCode:ServerBusy
ErrorMessage:The server is busy.
RequestId:*** removed ***
Time:2017-04-11T15:30:31.0229653Z
Run Code Online (Sandbox Code Playgroud)

小智 5

该错误表明您的应用程序受到 Azure 存储表服务的限制。

调查这些问题的一个好方法是启用存储分析指标并查看您的应用程序是否在存储可扩展性目标之内。有请求数量和限制错误数量的事务指标。

https://learn.microsoft.com/en-us/rest/api/storageservices/fileservices/about-storage-analytics-metrics

https://learn.microsoft.com/en-us/azure/storage/storage-scalability-targets

从代码中,考虑添加客户端重试(如果尚未添加)。如果可以的话,我通常还建议避免 PartitionKey 扫描,但在不了解应用程序性质的情况下很难提供额外的注释。