Azure Service bus 2.0版本触发器在服务器中不起作用

时间:2018-12-03 14:06:54

标签: c# azure azure-functions azureservicebus azure-servicebus-topics

我创建了一个用于向Azure服务总线主题发送消息的控制台,并创建了一个服务总线主题触发器。在本地,它可以正常工作,但是在Azure中部署相同的功能后,相同的代码无法正常工作。我是Azure新手,请帮助解决问题并在下面获取我的代码详细信息。

host.json

{
  "version": "2.0",
  "aggregator": {
    "batchSize": 1000,
    "flushTimeout": "00:00:30"
  },
  "extensions": {
    "cosmosDb": {},
    "durableTask": {},
    "eventHubs": {},
    "http": {},
    "queues": {},
    "sendGrid": {},
    "serviceBus": {}
  },
  "functions": [],
  "functionTimeout": "00:05:00",
  "healthMonitor": {
    "enabled": true,
    "healthCheckInterval": "00:00:10",
    "healthCheckWindow": "00:02:00",
    "healthCheckThreshold": 6,
    "counterThreshold": 0.80
  },
  "logging": {
    "fileLoggingMode": "debugOnly",
    "logLevel": {
      "Function.MyFunction": "Information",
      "default": "None"
    },
    "applicationInsights": {
      "samplingSettings": {
        "isEnabled": true,
        "maxTelemetryItemsPerSecond": 5
      }
    }
  },
  "singleton": {
    "lockPeriod": "00:00:15",
    "listenerLockPeriod": "00:01:00",
    "listenerLockRecoveryPollingInterval": "00:01:00",
    "lockAcquisitionTimeout": "00:01:00",
    "lockAcquisitionPollingInterval": "00:00:03"
  },
  "watchDirectories": [ "Shared", "Test" ]
}

local.setting.json

{
  "IsEncrypted": false,
  "Values": {
    "AzureWebJobsStorage": "DefaultEndpointsProtocol=https;....",
    "FUNCTIONS_WORKER_RUNTIME": "dotnet",
    "MyConnection": "Endpoint=sb://...."
  }
}

尝试了另一个

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

功能代码:

 [FunctionName("Function1")]
    public static void Run([ServiceBusTrigger("*****", "*****", Connection = "MyConnection")]string mySbMsg, ILogger log)
    {
        log.LogInformation($"C# ServiceBus topic trigger function processed message: {mySbMsg}");
    }

MyConnection->在此处传递服务总线连接字符串。

在本地我们可以获取调试点,如果尝试在另一台服务器上单独运行相同的功能,则不会监听请求。我在哪里弄错了?帮我解决这个问题!

更新 以及在发布Azure总线时,单击Visual Studio中的应用程序设置。然后,您还需要将连接字符串提供给remote。然后肯定可以正常工作!

2 个答案:

答案 0 :(得分:2)

确保将MyConnection放在Azure门户的“应用程序设置”中(“平台功能”>“应用程序设置”>“应用程序设置”部分),local.settings.json不会发布到Azure。

我建议在host.json中删除除"version": "2.0"以外的其他设置。内容是说明host.json结构的示例,我们不需要全部,只需指定所需内容即可。

答案 1 :(得分:2)

您的local.settings.json文件将具有这3个值(以及其他值)...

"SvcBusConStr": "Endpoint=sb://myservicebus Con String",
"SvcBusTopicName": "my-topic-name",
"SvcBusSubscriptionName": "my-sub-name",

您在Azure中的应用程序配置屏幕页面将需要这3个条目

SvcBusConStr  Endpoint=sb://myservicebus Con String
SvcBusTopicName   my-topic-name
SvcBusSubscriptionName   my-sub-name

请注意前两个参数上的百分号以读取“应用程序环境”设置。我还添加了“仅侦听”权限。

 [FunctionName("Function1")]
    public static void Run([ServiceBusTrigger("%SvcBusTopicName%", "%SvcBusSubscriptionName%", AccessRights.Listen, Connection = "SvcBusConStr")]string mySbMsg, ILogger log)
    {
        log.LogInformation($"C# ServiceBus topic trigger function processed message: {mySbMsg}");
    }

我的答案可能无法完美地涵盖Azure Functions 2.0。