繁体   English   中英

C# Azure:本地运行时如何设置Azure超时和重试策略?

[英]C# Azure: How to set Azure timeout and retry policy when running locally?

我正在编写针对 Azure 云运行的 C# 代码。 我的应用程序是一个 ASP.NET 核心 web 服务,它公开方法但没有 UI。

有时我想使用 Microsoft Azure 存储模拟器在本地运行我的代码。 当我的代码启动时,首先发生的事情之一是:

var container = new BlobContainerClient(_connectionString, s);
bool exists = await container.ExistsAsync(ct);
if (!exists)
    await container.CreateAsync(cancellationToken: ct);

在本地运行时,有时会忘记启动 Azure Storage Emulator。 发生这种情况时,我的代码需要一分钟才能超时并告诉我它无法到达“云”。

我想要实现的是:让程序在本地运行时快速给我很好的错误消息,但在云端实际运行时使用更宽松的超时策略。

我可以通过执行以下操作来减少上述超时:

var blobClientOptions = new BlobClientOptions();
blobClientOptions.Retry.MaxRetries = 0;
var container = new BlobContainerClient(_connectionString, s, blobClientOptions);

...但是当我在真正的云上运行时,我不希望这样; 我希望它重试。 一种选择可能是像上面那样将重试次数设置为零,但仅在本地运行时

我有一个特定于开发的配置文件( appsettings.Development.json )。 是否可以在配置文件中配置此类超时/重试设置?

还是有其他一些最佳实践方法来完成我寻求的“快速开发失败”行为?

提前致谢!

  • 创建一个包含 blobstorage 配置的 class :
public class BlobStorageConfiguration  
{
  public string ConnectionString {get; set;}
  public int MaxRetries {get; set;}
}
  • 在你的appsettings.Development.json
{
 ...
  "BlobStorageConfiguration": {
    "ConnectionString " : "<your_connection_string>",
    "MaxRetries ":0
  }
 ...
}

  • ConfigureServices方法中的Startup.cs
..
 var blobConfig = new BlobStorageConfiguration ();
 Configuration.Bind(nameof(BlobStorageConfiguration ), blobConfig);
 services.AddSingleton(blobConfig );
..
  • 现在您可以注入您的配置,如果您在本地运行它,它将从appsettings.Development.json中获取值:

一些 controller:

[Route("api/somthing")]
[ApiController]
    public class SomethingController : ControllerBase
        private readonly ILogger<SomethingController > logger;

        public SomethingController (
            ILogger<SomethingController > logger,
            BlobStorageConfiguration blobConfig)
        {
            this.logger = logger;
         // use your blobConfig (connectionstring and maxRetries)
        }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM