我有一个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()
我已经搜索过,但是找不到任何存在类似问题的人(并已解决)。我正在运行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构建的。
如果您有任何建议或需要其他信息,请告诉我。
编辑:我抓取了一个红色的异常文本,该文本在关闭之前在控制台窗口中短暂显示(在我收到上述异常之前发生),其内容为:
Host initialized
A host error has occurred
System.Private.Uri: Value cannot be null
Parameter name: uriString
Stopping job host
对此进行搜索,我发现了this,但似乎并不需要更改属性以使其正常工作。
在此先感谢您的帮助。
答案 0 :(得分:2)
问题是由此设置引起的
"MyConnection": "UseDevelopmentStorage=true"
UseDevelopmentStorage=true
代表存储仿真器连接字符串,对于服务总线触发器,请使用服务总线连接字符串(与服务总线资源管理器中使用的字符串相同,或在Azure portal中找到它)。
一些改进:
在local.settings.json中,LocalHttpPort
在VS中不起作用,您可以将其删除,因为launchSettings.json中的commandLineArgs
可以正常工作。
AzureWebJobsDashboard
现在不是必需的,因此可以将其删除而无需特殊用途。
在launchSettings.json中,也删除无效的executablePath
。通常,我们不需要此设置,因为VS默认使用最新的CLI。
答案 1 :(得分:0)
其中一种方法是,通过从[ServiceBusTrigger]中删除连接字符串并通过local.settings.json插入连接字符串来对问题进行排序。
功能文件中的。 [ServiceBusTrigger(“您的主题名称”,“ SubscriptionName”,Connection =“ MyServiceBus”)]
在local.settings.json内部。
{ “已加密”:false, “值”:{ “ AzureWebJobsStorage”:“ UseDevelopmentStorage = true”, “ AzureWebJobsMyServiceBus”:“您的连接字符串”, “ FUNCTIONS_WORKER_RUNTIME”:“ dotnet” } }
答案 2 :(得分:0)