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);
在本地 运行ning 时,我有时会忘记启动 Azure 存储模拟器。发生这种情况时,我的代码会在一分钟后超时并告诉我它无法到达“云”。
我想要实现的是:让程序在本地 运行ning 时快速给我良好的错误消息,但在实际 运行ning 时使用更宽松的超时策略云.
我可以通过这样做来减少上述超时:
var blobClientOptions = new BlobClientOptions();
blobClientOptions.Retry.MaxRetries = 0;
var container = new BlobContainerClient(_connectionString, s, blobClientOptions);
...但是当 运行面对真正的云时,我不想要那样;我想让它重试。一种选择可能是像上面那样将重试设置为零,但仅当 运行在本地。
我有一个特定于开发的配置文件 (appsettings.Development.json
)。是否可以在配置文件中配置这样的 timeout/retry 设置?
或者是否有其他一些最佳实践方法来实现我寻求的“开发中快速失败”行为?
提前致谢!
- 创建一个 class 将包含您的 blobstorage 配置:
public class BlobStorageConfiguration
{
public string ConnectionString {get; set;}
public int MaxRetries {get; set;}
}
- 在你的
appsettings.Development.json
{
...
"BlobStorageConfiguration": {
"ConnectionString " : "<your_connection_string>",
"MaxRetries ":0
}
...
}
- 在你的
Startup.cs
中在ConfigureServices
方法中
..
var blobConfig = new BlobStorageConfiguration ();
Configuration.Bind(nameof(BlobStorageConfiguration ), blobConfig);
services.AddSingleton(blobConfig );
..
- 现在您可以注入您的配置,如果您在本地 运行 它将从
appsettings.Development.json
获取值:
某个控制器:
[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)
}
我正在编写 运行针对 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);
在本地 运行ning 时,我有时会忘记启动 Azure 存储模拟器。发生这种情况时,我的代码会在一分钟后超时并告诉我它无法到达“云”。
我想要实现的是:让程序在本地 运行ning 时快速给我良好的错误消息,但在实际 运行ning 时使用更宽松的超时策略云.
我可以通过这样做来减少上述超时:
var blobClientOptions = new BlobClientOptions();
blobClientOptions.Retry.MaxRetries = 0;
var container = new BlobContainerClient(_connectionString, s, blobClientOptions);
...但是当 运行面对真正的云时,我不想要那样;我想让它重试。一种选择可能是像上面那样将重试设置为零,但仅当 运行在本地。
我有一个特定于开发的配置文件 (appsettings.Development.json
)。是否可以在配置文件中配置这样的 timeout/retry 设置?
或者是否有其他一些最佳实践方法来实现我寻求的“开发中快速失败”行为?
提前致谢!
- 创建一个 class 将包含您的 blobstorage 配置:
public class BlobStorageConfiguration
{
public string ConnectionString {get; set;}
public int MaxRetries {get; set;}
}
- 在你的
appsettings.Development.json
{
...
"BlobStorageConfiguration": {
"ConnectionString " : "<your_connection_string>",
"MaxRetries ":0
}
...
}
- 在你的
Startup.cs
中在ConfigureServices
方法中
..
var blobConfig = new BlobStorageConfiguration ();
Configuration.Bind(nameof(BlobStorageConfiguration ), blobConfig);
services.AddSingleton(blobConfig );
..
- 现在您可以注入您的配置,如果您在本地 运行 它将从
appsettings.Development.json
获取值:
某个控制器:
[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)
}