2017-04-12 87 views
2
  • 语言:C#
  • 框架:.NET 4.5
  • 的NuGet:WindowsAzure.Storage 8.0.1版

嗨。Microsoft.WindowsAzure.Storage.StorageException - 服务器忙

我看到Microsoft.WindowsAzure.Storage.StorageException在生产站点的日志中不时地告诉我“服务器正忙”。有没有人有任何经验或专业提示如何摆脱这种行为。我应该改变Azure Portal中的某些设置还是使用我的代码做些什么?

当下例中的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); 
} 

登录:

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 

回答

2

错误表明您的应用程序越来越受Azure存储表服务节流。

调查这些问题的一个好方法是启用存储分析度量标准并查看您的应用程序是否在存储可伸缩性目标中。有关于请求数量和节流错误数量的事务度量标准。

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

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

从代码,请考虑添加客户端重试,如果你还没有准备好。如果可以,我通常还会建议避免使用PartitionKey扫描,但如果不知道应用程序的性质,很难提供其他评论。