Azure Blob 存储异常“现有连接被远程主机强行关闭”
Posted
技术标签:
【中文标题】Azure Blob 存储异常“现有连接被远程主机强行关闭”【英文标题】:Azure blob storage exception "An existing connection was forcibly closed by the remote host" 【发布时间】:2016-07-12 18:27:36 【问题描述】:我正在尝试使用 azure blob 存储。 我成功上传了一些图片,但突然出现错误:
现有连接被远程主机强行关闭
我查看了它,每当我尝试检查 blob 容器是否存在时都会引发异常。
这是我的代码:
BlobClient getter 属性:(注意,我已经在连接字符串中用**标记了敏感数据)
static string connectionString = "DefaultEndpointsProtocol=https;AccountName=**;AccountKey=**;BlobEndpoint=https://**.blob.core.windows.net/;TableEndpoint=https://**.table.core.windows.net/;QueueEndpoint=https://**.queue.core.windows.net/;FileEndpoint=https://**.file.core.windows.net/";
public static CloudBlobClient BlobClient
get
// Retrieve storage account from connection string.
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(connectionString);
// Create the blob client.
CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
return blobClient;
抛出异常的实际代码:
CloudBlobContainer container = BlobClient.GetContainerReference(containerName);
if (!container.Exists())
准确地说,异常发生在我检查容器是否存在的那一行。
我不知道出了什么问题。我很肯定连接字符串是正确的(我把它复制进去了)。
如果有人能告诉我问题可能是什么,我将不胜感激。
【问题讨论】:
你能看到门户中的容器吗? @JackZeng 是的,我可以。 @JackZeng 我什至在使用 azure storage explorer,从那里我可以上传就好了。 @JackZeng 奇怪的东西,现在它又无缘无故地工作了。是什么原因造成的?它应该与超时或网络无关,因为文件非常小(20kb) 可能是网络故障或服务器端维护造成的。我无法重现您的问题,因此无法找到真正的原因。 【参考方案1】:可伸缩性的最佳做法是将 .NET 默认连接限制增加到 100。在客户端环境中,默认值为 2。必须在打开任何连接之前设置默认连接限制。对于这个其他可扩展性最佳实践,请参阅Microsoft Azure Storage Performance and Scalability Checklist。
【讨论】:
【参考方案2】:也可能由于超时而发生。
在这种情况下,您可以使用BlobRequestOptions
设置您选择的超时时间。 (我发现它在CloudBlobContainer.ListBlobsSegmented
方法中很有用。)
这是您问题的代码示例:
CloudBlobContainer container = blobClient.GetContainerReference(containerName);
var containerExists = container.Exists(new BlobRequestOptions()
ServerTimeout = TimeSpan.FromMinutes(5)
);
if (!containerExists)
// ...
【讨论】:
以上是关于Azure Blob 存储异常“现有连接被远程主机强行关闭”的主要内容,如果未能解决你的问题,请参考以下文章
读取大型 .accdb 文件引发异常“现有连接被远程主机强行关闭”