我试图使用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())
准确地说,异常发生在我检查容器是否存在的行上。
我不知道出了什么问题。我很肯定连接字符串是正确的(我将其复制)。
如果有人能告诉我可能出现的问题,我真的很感激。
答案 0 :(得分:0)
可伸缩性的最佳做法是将.NET默认连接限制增加到100.默认情况下,在客户端环境中,默认值为2.必须在打开任何连接之前设置默认连接限制。有关此其他可扩展性最佳做法,请参阅Microsoft Azure Storage Performance and Scalability Checklist。
答案 1 :(得分:0)
也可能由于超时而发生。
在这种情况下,您可以使用BlobRequestOptions
来设置您选择的超时。 (我发现它在CloudBlobContainer.ListBlobsSegmented
方法中很有用。)
以下是您的问题的代码示例:
CloudBlobContainer container = blobClient.GetContainerReference(containerName);
var containerExists = container.Exists(new BlobRequestOptions() {
ServerTimeout = TimeSpan.FromMinutes(5)
});
if (!containerExists)
// ...