Azure表存储抛出异常: Unable to read data from the transport connection:

标签 azure azure-storage azure-worker-roles azure-table-storage

我在 5-6 小时后运行了 6-7 个小时的长 Azure 表存储查询,Azure 表存储抛出异常“无法从传输连接读取数据:现有连接被强制关闭”远程主机。现有连接被远程主机强制关闭“**

    "Exception : Unable to read data from the transport connection: An existing connection was forcibly closed by the remote host., Stack Trace :    at Microsoft.WindowsAzure.Storage.Core.Executor.Executor.ExecuteSync[T](RESTCommand`1 cmd, IRetryPolicy policy, OperationContext operationContext)
       at Microsoft.WindowsAzure.Storage.Table.TableQuery`1.<>c__DisplayClass7.<ExecuteInternal>b__6(IContinuationToken continuationToken)
       at Microsoft.WindowsAzure.Storage.Core.Util.CommonUtility.<LazyEnumerable>d__0`1.MoveNext()
       at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)
       at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)"

**

不知道是什么导致了问题,任何人都可以帮我解决此错误的原因。

 ServicePointManager.DefaultConnectionLimit = 48;
            ServicePointManager.Expect100Continue = false;
            ServicePointManager.UseNagleAlgorithm = false;

我使用的是A7(8个CPU核心,56 GB RAM),即使配置很高也失败。

还包括表存储上的重试逻辑,以确保执行查询,但没有运气。

 var DefaultRequestOptions = new TableRequestOptions
                            {
                                RetryPolicy =new ExponentialRetry(TimeSpan.FromSeconds(3), 3),
                                //PayloadFormat = TablePayloadFormat.JsonNoMetadata
                            };
 AzureTableQuery.Execute(DefaultRequestOptions).ToList();

我还检查了网络输入:它显示有 100 GB。网络带宽有限制吗?我请求任何人对此提供帮助。 提前致谢

最佳答案

对于需要这么长时间的查询,最好逐个处理结果,而不是尝试一次下载所有内容。这样,如果您的查询在任何时候失败,您不必重新下载所有内容。例如:

        TableContinuationToken token = null;
        try
        {
            do
            {
                TableQuerySegment<ITableEntity> segment = AzureTableQuery.ExecuteSegmented(token);
                // Do something with segment.Results(), which is this batch of results from the query
                List<ITableEntity> results = segment.Results;

                // Save the continuation token for the next iteration.
                token = segment.ContinuationToken;

            } while (token != null);
        }
        catch (Exception e)
        {
            // Handle exception, retry, etc
        }

这样,即使查询中途失败,您也可以获得部分结果,并且您拥有继续标记,因此您可以从中断处继续查询,而不是从头开始。

请注意,大多数表扫描的效率都不是很高;如果您的场景对延迟敏感,您可能需要重新设计表以允许更有效的查询。另外,我不确定如何在网络上获得 100 GB/s,但绝对不是全部来自这一次查询,Azure 存储不会为一次查询快速推送数据。

关于Azure表存储抛出异常: Unable to read data from the transport connection:,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27789360/

相关文章:

azure - New-AzureRmDataLakeStoreItem 'User-Agent' header 必须修改错误

python - 如何使用python sdk下载交付内容(视频)?

powershell - 使用 powershell 删除 azure 存储帐户

c# - 辅助角色和 Web 角色之间的 Azure 通信

c# - 替换 DocumentDB 中的文档不保存更改

caching - azure共享缓存和新的azure redis缓存有什么区别?

c# - Azure辅助角色刚开始工作

Azure Worker 将无法连接到虚拟网络

azure - 使用 python sdk v2 在 azureml 中进行模型漂移和数据漂移

azure-storage - 使用查询字符串进行 Azure CDN 缓存