CloudBlobContainer .Exists() 将挂起/超时

vig*_*ity 5 c# blob azure

由于某种原因,调用.Exists(),.CreateIfNotExists()并将.Create()挂起并且永远不会返回。我实际上并没有得到超时异常,我只是认为人们可能会搜索该术语。

下面是具体代码:

var container = _blobClient.GetContainerReference("report_dunderMifflin_details");

container.CreateIfNotExists(BlobContainerPublicAccessType.Off);

//alternatively, because I know it doesn't exist yet
//I can just call Create and it will hang too
container.Create();
Run Code Online (Sandbox Code Playgroud)

vig*_*ity 1

我尝试通过 Azure 门户手动创建相同的容器 ( report_dunderMifflin_details),但出现以下异常:

容器名称只能包含字母、数字和连字符,并且必须为小写。名称必须以字母或数字开头。该名称不能包含两个连续的连字符。

一旦我将容器名称从 更改为report_dunderMifflin_detailsreport-dundermifflin-details它就工作得很好。令人失望的是 Windows.AzureStorage 类中没有抛出任何异常。

编辑1:

看起来,Create()即使名称使用正确的格式,调用已经存在的容器也会导致调用。瘸。

编辑2:

我已经开始在 Azure SDK 之上编写外观,这样它就不太复杂,并实现了用于模拟/测试目的的接口。我将此辅助方法添加到我的外观中,以检查是否存在错误的建议容器名称。

private void CheckContainer(string containerName)
{
    var invalidNameMessage = "Container names can contain only letters, numbers, and hyphens and must be lowercase. The name must start with a letter or a number. The name can't contain two consecutive hyphens.";

    var anyInvalidChars = new Regex("[^0-9a-z-]");
    if (anyInvalidChars.IsMatch(containerName))
        throw new ArgumentException(invalidNameMessage);

    var startsWithHyphen = new Regex("$-");
    if (startsWithHyphen.IsMatch(containerName))
        throw new ArgumentException(invalidNameMessage);

    var twoHyphens = new Regex("--");
    if (twoHyphens.IsMatch(containerName))
        throw new ArgumentException(invalidNameMessage);
}
Run Code Online (Sandbox Code Playgroud)