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

时间:2018-10-23 13:35:05

标签: azure azure-functions azureservicebus azure-servicebus-queues

我有一个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,但似乎并不需要更改属性以使其正常工作。

在此先感谢您的帮助。

3 个答案:

答案 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”   } }

  • 注意:连接字符串的名称以“ AzureWebJobs”开头,因此您可以将其余的作为名称。

答案 2 :(得分:0)