Azure functions 函数运行时在服务总线触发器上出现“声明为空”错误时启动失败

Azure functions 函数运行时在服务总线触发器上出现“声明为空”错误时启动失败,azure-functions,azureservicebus,Azure Functions,Azureservicebus,我为当前正在开发的系统设置了几个主题来使用新的功能应用程序,每次它尝试启动时,我都会收到一个失败错误 函数运行时无法启动。请检查一下电话号码 运行时日志以查找任何错误,或稍后重试。 Microsoft.ServiceBus:远程服务器返回错误: 401未经授权。索赔是空的。TrackingId:b221222c- df39-4abb-8af7-8afd880fd363_G8,系统跟踪器:giftie- production.servicebus.windows.net:out smtp, 时间戳

我为当前正在开发的系统设置了几个主题来使用新的功能应用程序,每次它尝试启动时,我都会收到一个失败错误

函数运行时无法启动。请检查一下电话号码 运行时日志以查找任何错误,或稍后重试。 Microsoft.ServiceBus:远程服务器返回错误: 401未经授权。索赔是空的。TrackingId:b221222c- df39-4abb-8af7-8afd880fd363_G8,系统跟踪器:giftie- production.servicebus.windows.net:out smtp, 时间戳:2018年1月19日凌晨1:52:12。系统:远程 服务器返回错误:401未经授权。 会话Id:547e23d54eca44fcb2503bf88d8cb05e 时间戳:2018-01-19T01:52:31.245Z

我已经检查了所有共享访问策略,这在两个主题的每个订阅上都会发生。我有一个单独的功能应用程序,从不同的主题运行,这似乎工作正常。 我已尝试删除并重新创建访问策略,更新AppSettings中的连接字符串,删除并重新创建订阅

我认为function.json看起来不错-下面是一个示例:

{
  "bindings": [
    {
      "type": "serviceBusTrigger",
      "connection": "SB-out-smtp-listener",
      "topicName": "out-smtp",
      "subscriptionName": "smtp-sendgrid",
      "access": "manage",
      "direction": "in",
      "name": "jsonMessage"
    }
  ],
  "disabled": false,
  "scriptFile": "..\\bin\\notifications.hellogiftie.com.dll",
  "entryPoint": "notifications.hellogiftie.com.ApiServiceBus.SbSmtpSendgrid.Run"
}

我在这一点上非常困惑,如果有任何想法,我将不胜感激

我成功地修复了这个问题,完全重新生成了我的函数应用程序项目,并将所有内容放回其中,删除Azure上的函数应用程序,然后重新发布。 即使如此,我在ServiceBustigger属性中输入的内容与Integrate屏幕上显示的内容之间仍然存在不匹配,尽管function.json看起来是正确的。 我在属性中有侦听权限,但出现了一个关于管理权限的错误。集成屏幕上显示我请求管理权限,更正后,一切都开始工作

我认为ServiceBustigger属性可能有一些有趣的地方:

    public static async Task Run([ServiceBusTrigger("out-smtp", "smtp-sendgrid", AccessRights.Listen, Connection = "SB-out-smtp-listener")]string jsonMessage, TraceWriter log)

Intellisense似乎告诉我有一个函数签名选项,它有两个访问权限参数,但一个描述为客户端对主题中的订阅的访问权限,另一个描述为获取客户端对队列或主题订阅的访问权限。

默认情况下,访问权限设置为在ServiceBusTrigger属性上进行管理。源代码,如果你想深入一点

2个问题。1.您是否能够使用与功能应用程序几乎相同的代码在某些快速控制台应用程序中重新设置此错误?2.您的共享访问策略是否具有发送权限?我使用了eventhubs,假设servicebus主题与发送/接收策略的工作方式类似。问题是它是一个传入触发器,因此它是特定于应用程序的功能。我的另一个带有SB触发器的功能应用程序似乎正常工作,我看不出它们的设置方式有什么不同。此外,我已尝试使用根SA密钥进行测试,以确保没有权限问题,每次我都会收到相同的错误。为了确定,您是否可以尝试以下方法来找出问题1的原因。在同一功能应用程序中创建新的SB触发功能。该函数应由您当前使用的同一个SB触发。2.给某人发个信。如果你的功能被触发。好的如果不是,你可能想和其他人一起测试。如果您的新功能工作正常,请使用KUDU控制台/门户将DLL/代码从旧功能复制到新功能。在我的情况下,此错误是由以下原因引起的:;在连接字符串的末尾。我知道,这看起来很傻,但当我从中删除尾随分号时,它开始工作。这就是解决我问题的方法。连接字符串字段之间需要分号作为分隔符,因此在结尾处使用分号似乎是很自然的,尽管这当然不是必需的,但似乎access键允许使用特殊字符,因此这是一个陷阱。显然,分号被视为访问密钥的一部分。糟糕的配置设计。