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

aydmsdu9  于 2022-12-30  发布在  其他
关注(0)|答案(5)|浏览(151)

我有一个v.2 Service Bus Trigger函数,当我尝试启动它时,会抛出以下异常:

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()

我已经搜索过了,但是没有找到任何人有类似的问题(和修复)。我正在运行VS15.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}");
        }

这是我的本地设置json:

{
  "IsEncrypted": false,
  "Values": {
    "FUNCTIONS_WORKER_RUNTIME": "dotnet",
    "MyConnection": "UseDevelopmentStorage=true",
    "AzureWebJobsStorage": "UseDevelopmentStorage=true",
    "AzureWebJobsDashboard": "UseDevelopmentStorage=true"
  },
  "Host": {
    "LocalHttpPort": 7077
  }    
}

我还尝试在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"
    }
  }
}

我运行了服务总线浏览器,并在上面创建了上述主题和订阅。函数所在的项目是基于. NET Standard 2.0构建的。
如果您有任何建议或需要更多信息,请告诉我。

    • EDIT:**我抓取了控制台窗口关闭前短暂出现的红色异常文本(就在我得到上面的异常之前),它如下:
Host initialized
A host error has occurred
System.Private.Uri: Value cannot be null
Parameter name: uriString
Stopping job host

搜索这个,我找到了this,但是看起来好像我不应该改变属性来让它工作。
提前感谢您的帮助。

vtwuwzda

vtwuwzda1#

此设置导致问题

"MyConnection": "UseDevelopmentStorage=true"

UseDevelopmentStorage=true表示存储模拟器连接字符串,对于服务总线触发器,请使用服务总线连接字符串(与服务总线资源管理器中使用的字符串相同,或在Azure门户中找到)。
一些改进:
在local.settings.json中,LocalHttpPort不知何故在VS中不起作用,您可以删除它,因为launchSettings.json中的commandLineArgs按预期工作。
现在不需要AzureWebJobsDashboard,所以没有特殊目的可以删除。
在launchSettings.json中,删除同样无效的executablePath。通常我们不需要这个设置,因为VS默认使用最新的CLI。

ckx4rj1h

ckx4rj1h2#

其中一种方法是,我通过从[ServiceBusTrigger]中删除连接字符串并通过local.settings.json插入它来解决问题。
在函数文件中。

[ServiceBusTrigger("Your-Topics-Name", "SubscriptionName",Connection = "MyServiceBus")]

在本地. settings.json中。

{
    "IsEncrypted": false,
  "Values": {
    "AzureWebJobsStorage": "UseDevelopmentStorage=true",
    "AzureWebJobsMyServiceBus": "your connection string",
    "FUNCTIONS_WORKER_RUNTIME": "dotnet"
  }
}
  • 注意:连接字符串名称以“AzureWebJobs”开头,因此您可以将其余部分作为名称。
jgwigjjp

jgwigjjp3#

在我的例子中,只是将Microsoft.Azure.WebJobs.Extensions.ServiceBus的版本从 4.7.x 更新到5.x.x,仅此而已:-)

but5z9lq

but5z9lq4#

我必须安装Azure Functions核心工具。它包含一个版本的运行库,该运行库支持你可以在本地开发计算机上运行的Azure Functions运行库。它还提供用于创建函数、连接到Azure和部署函数项目的命令。

avkwfej4

avkwfej45#

在我的例子中,问题出在平台目标上,请将其更改为AnyCPU,而不是x86

相关问题