启动 Azure 服务总线触发器函数会引发“主机尚未启动”的 InvalidOperationException

Rob*_*obC 6 azure azureservicebus azure-servicebus-queues azure-functions

我有一个 v.2 服务总线触发器函数,当我尝试启动时,它抛出以下异常:

System.InvalidOperationException
  HResult=0x80131509
  Message=The host has not yet started.
  Source=Microsoft.Azure.WebJobs.Host
  StackTrace:
   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>d__10.MoveNext()
Run Code Online (Sandbox Code Playgroud)

我四处搜索,但找不到任何有类似问题(并修复)的人。我正在运行 VS 15.8.7,并更新了所有扩展和包。

这是我的函数的样子:

[FunctionName("ServiceBusListenerFunction")]
        public static void Run([ServiceBusTrigger("myTopic", "MySubscription", Connection = "MyConnection")]string mySbMsg, ILogger log)
        {
            log.LogInformation($"C# ServiceBus topic trigger function processed message: {mySbMsg}");
        }
Run Code Online (Sandbox Code Playgroud)

这是我的 local.settings.json:

{
  "IsEncrypted": false,
  "Values": {
    "FUNCTIONS_WORKER_RUNTIME": "dotnet",
    "MyConnection": "UseDevelopmentStorage=true",
    "AzureWebJobsStorage": "UseDevelopmentStorage=true",
    "AzureWebJobsDashboard": "UseDevelopmentStorage=true"
  },
  "Host": {
    "LocalHttpPort": 7077
  }    
}
Run Code Online (Sandbox Code Playgroud)

我还尝试在 launchSettings.json 中执行以下操作,但没有帮助:

{
  "profiles": {
    "MyProject": {
      "commandName": "Project",
      "executablePath": "C:\\Users\\[myUserName\\AppData\\Roaming\\npm\\node_modules\\azure-functions-core-tools\\bin\\func.dll",
      "commandLineArgs": "host start --port 7077"
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

我运行了 Service Bus Explorer,并在其上创建了上述主题和订阅。函数所在的项目是针对 .NET Standard 2.0 构建的。

如果您有任何建议或需要其他信息,请告诉我。

编辑:我抓住了在控制台窗口关闭之前短暂出现在控制台窗口中的红色异常文本(这发生在我得到上述异常之前),它显示为:

Host initialized
A host error has occurred
System.Private.Uri: Value cannot be null
Parameter name: uriString
Stopping job host
Run Code Online (Sandbox Code Playgroud)

对此进行搜索,我发现了this,但似乎我不必更改属性才能使其正常工作。

在此先感谢您的帮助。

Jer*_*Liu 4

问题是由这个设置引起的

"MyConnection": "UseDevelopmentStorage=true"
Run Code Online (Sandbox Code Playgroud)

UseDevelopmentStorage=true表示存储模拟器连接字符串,对于服务总线触发器,请使用服务总线连接字符串(与 Service Bus Explorer 中使用的相同或在 Azure门户中找到它)。

一些改进:

在 local.settings.json 中,LocalHttpPort不知何故在 VS 中不起作用,您可以将其删除,因为commandLineArgs在 launchSettings.json 中按预期工作。

AzureWebJobsDashboard现在不需要,所以没有特殊目的可以删除。

在 launchSettings.json 中,删除executablePath无效的内容。通常我们不需要这个设置,因为 VS 默认使用最新的 CLI。