[英]C# Azure: How to set Azure timeout and retry policy when running locally?
I am writing C# code that runs against an Azure cloud.我正在编写针对 Azure 云运行的 C# 代码。 My application is an ASP.NET Core web service that exposes methods but no UI.
我的应用程序是一个 ASP.NET 核心 web 服务,它公开方法但没有 UI。
Sometimes I want to run my code locally using Microsoft Azure Storage Emulator.有时我想使用 Microsoft Azure 存储模拟器在本地运行我的代码。 When my code starts up, one of the first things that happens is this:
当我的代码启动时,首先发生的事情之一是:
var container = new BlobContainerClient(_connectionString, s);
bool exists = await container.ExistsAsync(ct);
if (!exists)
await container.CreateAsync(cancellationToken: ct);
When running locally, I sometimes forget to start Azure Storage Emulator.在本地运行时,有时会忘记启动 Azure Storage Emulator。 When that happens, it takes my code like a minute to time out and tell me it can't reach the "cloud".
发生这种情况时,我的代码需要一分钟才能超时并告诉我它无法到达“云”。
What I want to achieve is: Make the program give me good error messages quickly when running locally, but use more lenient timeout strategies when actually running in the cloud.我想要实现的是:让程序在本地运行时快速给我很好的错误消息,但在云端实际运行时使用更宽松的超时策略。
I can reduce the above timeout by doing something like this:我可以通过执行以下操作来减少上述超时:
var blobClientOptions = new BlobClientOptions();
blobClientOptions.Retry.MaxRetries = 0;
var container = new BlobContainerClient(_connectionString, s, blobClientOptions);
... but when running against the real cloud I don't want that; ...但是当我在真正的云上运行时,我不希望这样; I want it to retry.
我希望它重试。 One option might be to set the retries to zero like above, but only when running locally .
一种选择可能是像上面那样将重试次数设置为零,但仅在本地运行时。
I have a development-specific configuration file ( appsettings.Development.json
).我有一个特定于开发的配置文件(
appsettings.Development.json
)。 Is it possible to configure such timeout/retry settings in the config file?是否可以在配置文件中配置此类超时/重试设置?
Or is there some other best-practice way to accomplish the "fail quickly in development" behaviour that I seek?还是有其他一些最佳实践方法来完成我寻求的“快速开发失败”行为?
Thanks in advance!提前致谢!
public class BlobStorageConfiguration
{
public string ConnectionString {get; set;}
public int MaxRetries {get; set;}
}
appsettings.Development.json
appsettings.Development.json
{
...
"BlobStorageConfiguration": {
"ConnectionString " : "<your_connection_string>",
"MaxRetries ":0
}
...
}
Startup.cs
in the ConfigureServices
methodConfigureServices
方法中的Startup.cs
..
var blobConfig = new BlobStorageConfiguration ();
Configuration.Bind(nameof(BlobStorageConfiguration ), blobConfig);
services.AddSingleton(blobConfig );
..
appsettings.Development.json
if you are running it locally:appsettings.Development.json
中获取值: some controller:一些 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.