.net - 将 v1 转换为 v2 DotNetStandard 的 Azure 函数 'AzureWebJobsServiceBus' 丢失或为空

标签 .net azure azure-functions azureservicebus

抱歉,这篇文章很长,我只是想提供所有我能提供的信息,并在问题出现之前解决问题。

致力于将 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

娱乐步骤

  1. 使用 Visual Studio 2017 转到"file"->“新建”->“项目”->“Azure Functions”->“确定”
  2. 选择 Azure Functions v2 (.NET Core)
  3. 选择空
  4. 右键单击“项目”->“添加”->“新建 Azure 函数”
  5. 选择服务总线队列触发器
  6. 转到 local.settings.json 并添加 ServiceBusConnectionString
  7. 开始调试,您将得到上面的异常。

最佳答案

您必须从设置文件中添加 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/

相关文章:

c# - 页面之间的套接字?

azure - 在 Azure Devops 中运行 Canopy

python - 通过 url 将参数传递给 python azure 函数

azure - 从 Azure WebJob 连接到本地 SQL 数据库

azure-functions - 将 OpenIdConnect 与 AzureFunctions 结合使用

c# - 在 TextBox 中查找插入符号的位置

c# - 不使用 IComparable<T> 查找最大/最小元素

javascript - 如何在前端Javascript应用程序中订阅Azure SignalR服务?

托管在 Windows 服务中的 c# wcf 在 5 分钟后空闲

c# - AcquireTokenByAuthorizationCode 使用 Azure Active Directory 在使用 ASP.NET MVC 的单租户应用程序中引发新异常