我创建了一个用于向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。然后肯定可以正常工作!
答案 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。