我的代码看起来像这样:
public class Startup : IWebJobsStartup
{
public async void Configure(IWebJobsBuilder builder)
{
Get Connection string Via HTTP Service.
ServiceBusConnectionString = jArray["connectionString"].ToString();
}
}
我想通过这样的连接
[FunctionName("FunctionTopicMessageLogger")]
public void Run([ServiceBusTrigger("topic", "FunctionTopicMessageLogger",Connection = **ServiceBusConnectionString** )]Message mySbMsg)
{
}
这是我第一次使用Local.setting.json文件
{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "UseDevelopmentStorage=true",
"Connectinstring": " "
}
}
问题是连接仅采用常量参数(因此不允许更改),因此我尝试写入local.setting.json并尝试从那里读取它,当我第一次运行时,我得到错误,从第二次连接那里,所以它工作正常。
是我做错了什么请建议。
4条答案
按热度按时间yqkkidmi1#
解决您的问题有两个重要部分。
1.在使用Service Bus触发器创建Azure函数的过程中,必须指定将用于检索连接字符串值的连接字符串参数的名称。在这种情况下,如果键入“ServiceBusConnectionString”,则必须在local.settings.json文件的“ConnectionStrings”部分中添加此类配置参数:
1.将您的函数部署到Azure后,您应使用门户中的“配置”部分,并应避免使用“local.settings.json”文件,因为它仅用于本地开发:
我希望这会有所帮助。
nxowjjhe2#
如果你打算使用
local.settings.json
中的键Connectionstring
,你应该可以通过以下操作自动从那里得到值:“连接”的值是
local.settings.json
文件中密钥的名称。2g32fytz3#
如果没有太多不同的服务总线,则可以为每个不同的connectionString创建一个函数。
每个函数在启动之前都需要知道connectionString,并开始等待服务总线中的消息。
如果您必须动态执行此操作,则不必使用Azure函数,您可以使用Service Bus SDK:
在此您可以看到如何手动管理客户端:https://learn.microsoft.com/en-us/azure/service-bus-messaging/service-bus-dotnet-get-started-with-queues
希望这对你有帮助!
e7arh2l64#
这个答案来得有点晚,但使用Azure的应用配置是可能的。它的工作原理有点像KeyVault,只是这些不是加密值。然后,你可以在运行时切换ServiceBusConnectionString。
这不允许您将其作为常量插入,但允许您在运行时切换ConnectionString。