代码之家  ›  专栏  ›  技术社区  ›  Rachel

连接属性在Azure ServiceBus订阅触发的函数中不起作用

  •  0
  • Rachel  · 技术社区  · 4 年前

    根据 the documentation ,您可以在ServiceBus触发的函数中指定连接。连接应引用该名称的应用程序设置,该名称包含到Azure ServiceBus命名空间的连接字符串。

    我有一个包含有效Azure ServiceBus连接字符串的应用程序设置,并且 Connection 参数设置为设置名称。但是,该功能不会启动。它确实在本地工作,或者如果我使用默认设置名称“AzureWebJobsServiceBus”。显然,我不想使用这个名称,因为我可能有多个连接。

    应用程序设置: App Settings

    功能代码:

    FunctionName("Test")]
    public static async Task Run([ServiceBusTrigger("topicname", "subscriptionname", Connection = "AzureWebJobsTestConn", IsSessionsEnabled = true)]
    

    我也尝试过:

    FunctionName("Test")]
    public static async Task Run([ServiceBusTrigger("topicname", "subscriptionname", Connection = "TestConn", IsSessionsEnabled = true)]
    

    我看到了一些相关的问题,但通常给出的答案是确保使用应用程序设置,而不是一些配置文件——我就是这样。

    任何帮助都将不胜感激!

    0 回复  |  直到 4 年前
        1
  •  0
  •   Hari Krishna    4 年前

    我试图通过以下步骤重现您的问题:

    1. 首先,我创建了一个 服务总线 namespae和a 队列 通过Azure门户。

    enter image description here

    1. 创建了 Azure功能 Http触发器模板和授权级别为匿名的项目。 此外,我还将函数文件重命名为 function1.cs 到 SendMessage.cs 并替换了链接服务总线队列的代码,以记录在传递的请求中读取的消息数。

    enter image description here

    密码

    using System.IO;
    using System.Text;
    using System.Threading.Tasks;
    using Microsoft.AspNetCore.Http;
    using Microsoft.Azure.WebJobs;
    using Microsoft.Azure.WebJobs.Extensions.Http;
    using Microsoft.Azure.WebJobs.ServiceBus;
    using Microsoft.EntityFrameworkCore.Metadata.Internal;
    using Microsoft.Extensions.Logging;
    
    namespace KrishSBFuncApp1
    {
         public static class SendMessage
            {
                [FunctionName("SendMessage")]
                [return: ServiceBus("krishqueue", Connection = "AzureWebJobsServiceBus")]
                public static async Task<string> Run(
                    [HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = null)] HttpRequest req,
                    ILogger log)
                {
                    log.LogInformation("SendMessage function requested");
                    string body = string.Empty;
                    using (var reader = new StreamReader(req.Body, Encoding.UTF8))
                    {
                        body = await reader.ReadToEndAsync();
                        log.LogInformation($"Message body : {body}");
                    }
                    log.LogInformation($"SendMessage processed.");
                    return body;
                        }
                    }
               }    }
    
    1. 在 local.settings.json文件 ,将您的服务总线命名空间共享访问策略主连接字符串复制到任何字符串中(此处我将其命名为 "AzureWebJobsServiceBus":<rootmanagesharedaccesskey-conn-string> ) enter image description here

    2. 我已将相同的连接字符串添加到 azure功能应用程序配置 设置如下: enter image description here

    使用Postman进行本地测试: 在Visual studio中构建并运行应用程序>您将获得API。 将API URL复制到邮递员并输入正文。 enter image description here enter image description here

    在将您的功能应用程序部署/发布到Azure后,使用Azure功能URL进行测试:

    1. Azure门户>功能应用程序>单击函数(在左侧索引窗格中)>选择您的功能>单击代码+测试(在左侧索引窗格中)。
    2. 您可以通过“测试/运行”选项运行应用程序,也可以在poster中运行。
    3. 我以两种方式执行,正如您在下面的图片中看到的那样,这有助于您理解哪个输出属于哪个输出。

    我已经把身体作为 Hello Dear Krishna 并在中发送请求 邮递员 还有一次我执行了 测试/运行 azure门户中的选项,将body作为 Hello Krishna .

    enter image description here

    队列计数为:

    enter image description here