asp.net-core - System.InvalidOperationException:“请验证 Azure 存储模拟器是否正在运行。”
问题描述
我正在使用以下设置在 localhost 上运行 .Net Core 2.1.2 WebJob:
"AzureWebJobsDashboard": "UseDevelopmentStorage=true",
"AzureWebJobsStorage": "UseDevelopmentStorage=true",
这是 Program.cs:
public static class Program
{
public static IConfigurationRoot Configuration { get; set; }
private static ConnectionStringsSettings _connectionStringsSettings;
private static ConnectionStringsSettings ConnectionStringsSettings
{
get
{
return _connectionStringsSettings ?? (_connectionStringsSettings = Configuration
.GetSection("ConnectionStrings")
.Get<ConnectionStringsSettings>()
);
}
}
public static async Task Main(string[] args)
{
var host = new HostBuilder()
.ConfigureAppConfiguration((_, configuration) =>
{
configuration.AddJsonFile("appsettings.json", optional: true);
configuration.AddJsonFile("appsettings.Development.json", optional: true);
configuration.AddEnvironmentVariables();
if (args != null)
{
configuration.AddCommandLine(args);
}
Configuration = configuration.Build();
})
.ConfigureServices((hostContext, services) =>
{
services.AddOptions();
services.Configure<ConnectionStringsSettings>(hostContext.Configuration.GetSection("ConnectionStrings"));
services.Configure<AzureStorageSettings>(hostContext.Configuration.GetSection("AzureStorage"));
services.AddApplicationInsightsTelemetry(hostContext.Configuration);
})
.ConfigureLogging((hostingContext, logging) =>
{
logging.AddConfiguration(hostingContext.Configuration.GetSection("Logging"));
logging.AddConsole();
})
.UseServiceProviderFactory(new AutofacServiceProviderFactory())
.ConfigureContainer<ContainerBuilder>(builder =>
{
builder.RegisterType<QueueFunctions>().InstancePerDependency();
builder.RegisterType<VideosCompressorQueueService>().As<IVideosQueueService>();
})
.Build()
.EnsureQueueExists();
var jobHostConfiguration = new JobHostConfiguration
{
JobActivator = new JobActivator(host),
DashboardConnectionString = ConnectionStringsSettings.AzureWebJobsDashboard,
StorageConnectionString = ConnectionStringsSettings.AzureWebJobsStorage
};
var webjob = new JobHost(jobHostConfiguration);
webjob.RunAndBlock();
}
public static IHost EnsureQueueExists(this IHost host)
{
var videosQueueService = host.Services.GetRequiredService<IVideosQueueService>();
videosQueueService.EnsureQueueExistsAsync().Wait();
return host;
}
}
JobActivator.cs: 公共类 JobActivator : IJobActivator { private readonly IHost _host;
public JobActivator(IHost host)
{
_host = host;
}
public T CreateInstance<T>()
{
return _host.Services.GetService<T>();
}
}
和 QueueFunctions.cs: public class QueueFunctions { private readonly IOptions _azureStorageSettings; 私有只读 ILogger _logger;
public QueueFunctions(
IOptions<AzureStorageSettings> azureStorageSettings,
ILogger<QueueFunctions> logger
)
{
_azureStorageSettings = azureStorageSettings;
_logger = logger;
}
public async Task ProcessAsync([QueueTrigger(Constants.Queues.Videos)] string text)
{
Console.WriteLine(text);
}
}
当我运行它时,我有这个错误:
.Net Core 2 中新增的 Host Builder 有问题吗?很可能我错过了我的代码中的某些内容?
解决方案
对于那些有同样问题的人,问题来自 Microsoft Azure WebJob nuget 包的版本。我需要更新到:
<PackageReference Include="Microsoft.Azure.WebJobs" Version="3.0.0-beta5" />
<PackageReference Include="Microsoft.Azure.WebJobs.Extensions" Version="3.0.0-beta5" />
现在一切正常。
推荐阅读
- java - 用于理解的 Java
- deep-learning - 需要在 Keras 中指定输入形状
- c# - 如何在静态类的帮助下在类之间传递值..?
- google-apps-script - 表单提交触发器创建 2 张 Trello 卡
- reactjs - 在构造函数与 componentDidMount 中加载翻译
- elasticsearch - ElasticSearch - 具有嵌套字段聚合的桶平均值
- vue.js - 从 vuex 操作返回 axios 承诺
- python - 从类的 .kv 文件中定义的 TextInput 获取文本
- gitk - 是否可以将 Gitk 作为一个提交来显示 2 个修订之间的差异?
- google-apps-script - 运行 onEdit(e) 以针对特定工作表范围触发时出错