抱歉,这篇文章很长,我只是想提供所有我能提供的信息,并在问题出现之前解决问题。
致力于将 Azure Function v1 .NET Framework 4.6.1 转换为 DotNetStandard 2.0 以实现依赖注入(inject)扩展。在运行时,我在控制台中遇到异常,读取连接字符串丢失的错误,但它位于 local.settings.json 中,就像在 v1 中一样。 According to the documentation it should default到 local.settings.json 文件和 Azure 上的 ApplicationSettings 中的 AzureWebJobsServiceBus 值。
A host error has occurred
Microsoft.Azure.WebJobs.ServiceBus: Microsoft Azure WebJobs SDK ServiceBus connection string 'AzureWebJobsServiceBus' is missing or empty.
在 JobHost.cs 的控制台中发布“主机尚未启动”后,我立即收到运行时异常。
at Microsoft.Azure.WebJobs.JobHost.StopAsync() in C:\projects\azure-webjobs-sdk-rqm4t\src\Microsoft.Azure.WebJobs.Host\JobHost.cs:line 121 at Microsoft.Azure.WebJobs.Hosting.JobHostService.StopAsync(CancellationToken cancellationToken) in C:\projects\azure-webjobs-sdk-rqm4t\src\Microsoft.Azure.WebJobs.Host\Hosting\JobHostService.cs:line 32 at Microsoft.Extensions.Hosting.Internal.Host.StopAsync(CancellationToken cancellationToken)
继续该异常会给出下一个“容器已释放且不应使用:容器已释放。 您可以通过以下方式将 Dispose 堆栈跟踪包含到消息中: 容器.With(规则 => 规则.WithCaptureContainerDisposeStackTrace())"
at DryIoc.Throw.It(Int32 error, Object arg0, Object arg1, Object arg2, Object arg3) in C:\azure-webjobs-sdk-script\src\WebJobs.Script.WebHost\DependencyInjection\DryIoc\Container.cs:line 8991 at DryIoc.Container.ThrowIfContainerDisposed() in C:\azure-webjobs-sdk-script\src\WebJobs.Script.WebHost\DependencyInjection\DryIoc\Container.cs:line 411 at DryIoc.Container.ResolveAndCacheDefaultFactoryDelegate(Type serviceType, IfUnresolved ifUnresolved) in C:\azure-webjobs-sdk-script\src\WebJobs.Script.WebHost\DependencyInjection\DryIoc\Container.cs:line 200 at DryIoc.Container.DryIoc.IResolver.Resolve(Type serviceType, IfUnresolved ifUnresolved) in C:\azure-webjobs-sdk-script\src\WebJobs.Script.WebHost\DependencyInjection\DryIoc\Container.cs:line 195 at Microsoft.Azure.WebJobs.Script.WebHost.DependencyInjection.JobHostServiceProvider.GetService(Type serviceType, IfUnresolved ifUnresolved) in C:\azure-webjobs-sdk-script\src\WebJobs.Script.WebHost\DependencyInjection\JobHostServiceProvider.cs:line 101 at Microsoft.Azure.WebJobs.Script.WebHost.DependencyInjection.JobHostServiceProvider.GetRequiredService(Type serviceType) in C:\azure-webjobs-sdk-script\src\WebJobs.Script.WebHost\DependencyInjection\JobHostServiceProvider.cs:line 84 at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(IServiceProvider provider, Type serviceType) at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService[T](IServiceProvider provider) at Azure.Functions.Cli.Actions.HostActions.StartHostAction.RunAsync() in C:\azure-functions-cli\src\Azure.Functions.Cli\Actions\HostActions\StartHostAction.cs:line 241
local.settings.json(在许多值中):
...,
"Values": {
"FUNCTIONS_WORKER_RUNTIME": "dotnet",
"AzureWebJobsServiceBus": "Endpoint=sb://[my_name].servicebus.windows.net/;SharedAccessKeyName=LocalManage;SharedAccessKey=[my_key]",
...
我的 csproj 文件内容如下:
<TargetFramework>netstandard2.0</TargetFramework>
<AzureFunctionsVersion>v2</AzureFunctionsVersion>
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
我正在使用 Visual Studio 2017 版本 15.9.9
Azure Functions 和 Web 作业工具为 15.10.2046.0
编辑:
似乎不限于从 v1 转换为 v2
娱乐步骤
- 使用 Visual Studio 2017 转到"file"->“新建”->“项目”->“Azure Functions”->“确定”
- 选择 Azure Functions v2 (.NET Core)
- 选择空
- 右键单击“项目”->“添加”->“新建 Azure 函数”
- 选择服务总线队列触发器
- 转到 local.settings.json 并添加 ServiceBusConnectionString
- 开始调试,您将得到上面的异常。
最佳答案
您必须从设置文件中添加 key 名称才能使其立即工作。 See this GitHub issue.
[ServiceBusTrigger("mytopic",` "mysubscription", Connection = "ConnectionStringSettingName")]
然后在你的 local.settings.json 中
...,
"Values": {
"FUNCTIONS_WORKER_RUNTIME": "dotnet",
"ConnectionStringSettingName": "Endpoint=sb://[my_name].servicebus.windows.net/;SharedAccessKeyName=LocalManage;SharedAccessKey=[my_key]",
...
关于.net - 将 v1 转换为 v2 DotNetStandard 的 Azure 函数 'AzureWebJobsServiceBus' 丢失或为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56295327/