启动 Azure 服务总线触发器函数引发 "Host not yet started" 的 InvalidOperationException
Starting Azure Service Bus Trigger Function throws InvalidOperationException for "Host not yet started"
我有一个 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()
我四处搜索但找不到有类似问题(并修复)的人。我是 运行 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}");
}
这是我的 local.settings.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"
}
}
}
我有 Service Bus Explorer 运行 并创建了上述主题和订阅。函数所在的项目是针对.NET Standard 2.0构建的。
如果您有任何建议或需要更多信息,请告诉我。
编辑: 我抓住了在控制台 window 关闭之前短暂出现的红色异常文本(这发生在我得到上述异常之前),并且上面写着:
Host initialized
A host error has occurred
System.Private.Uri: Value cannot be null
Parameter name: uriString
Stopping job host
对此进行搜索,我找到了 ,但似乎我不需要更改属性来使其正常工作。
在此先感谢您的帮助。
问题是由这个设置引起的
"MyConnection": "UseDevelopmentStorage=true"
UseDevelopmentStorage=true
表示存储模拟器连接字符串,对于服务总线触发器,使用服务总线连接字符串(与服务总线资源管理器中使用的相同或在 Azure portal 中找到)。
一些改进:
在 local.settings.json 中,LocalHttpPort
在 VS 中无法正常工作,您可以删除它,因为 launchSettings.json 中的 commandLineArgs
可以正常工作。
AzureWebJobsDashboard
现在不需要了,无特殊目的可以删除
在launchSettings.json中,删除同样无效的executablePath
。通常我们不需要此设置,因为 VS 默认使用最新的 CLI。
其中一种方法是,我通过从 [ServiceBusTrigger] 中删除连接字符串并通过 local.settings.json 插入它来解决问题。
在函数文件中。
[ServiceBusTrigger("Your-Topics-Name", "SubscriptionName",Connection = "MyServiceBus")]
里面 local.settings.json.
{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "UseDevelopmentStorage=true",
"AzureWebJobsMyServiceBus": "your connection string",
"FUNCTIONS_WORKER_RUNTIME": "dotnet"
}
}
- 注意:连接字符串名称以“AzureWebJobs”开头,因此您可以将其余部分作为名称。
我有一个 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()
我四处搜索但找不到有类似问题(并修复)的人。我是 运行 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}");
}
这是我的 local.settings.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"
}
}
}
我有 Service Bus Explorer 运行 并创建了上述主题和订阅。函数所在的项目是针对.NET Standard 2.0构建的。
如果您有任何建议或需要更多信息,请告诉我。
编辑: 我抓住了在控制台 window 关闭之前短暂出现的红色异常文本(这发生在我得到上述异常之前),并且上面写着:
Host initialized
A host error has occurred
System.Private.Uri: Value cannot be null
Parameter name: uriString
Stopping job host
对此进行搜索,我找到了
在此先感谢您的帮助。
问题是由这个设置引起的
"MyConnection": "UseDevelopmentStorage=true"
UseDevelopmentStorage=true
表示存储模拟器连接字符串,对于服务总线触发器,使用服务总线连接字符串(与服务总线资源管理器中使用的相同或在 Azure portal 中找到)。
一些改进:
在 local.settings.json 中,LocalHttpPort
在 VS 中无法正常工作,您可以删除它,因为 launchSettings.json 中的 commandLineArgs
可以正常工作。
AzureWebJobsDashboard
现在不需要了,无特殊目的可以删除
在launchSettings.json中,删除同样无效的executablePath
。通常我们不需要此设置,因为 VS 默认使用最新的 CLI。
其中一种方法是,我通过从 [ServiceBusTrigger] 中删除连接字符串并通过 local.settings.json 插入它来解决问题。
在函数文件中。
[ServiceBusTrigger("Your-Topics-Name", "SubscriptionName",Connection = "MyServiceBus")]
里面 local.settings.json.
{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "UseDevelopmentStorage=true",
"AzureWebJobsMyServiceBus": "your connection string",
"FUNCTIONS_WORKER_RUNTIME": "dotnet"
}
}
- 注意:连接字符串名称以“AzureWebJobs”开头,因此您可以将其余部分作为名称。