【问题标题】:Pre-compiled Azure Function with IBinder fails with "No binding found for attribute" exception使用 IBinder 预编译的 Azure 函数失败,并出现“未找到属性绑定”异常
【发布时间】:2017-09-26 01:06:26
【问题描述】:

我有一个 Azure 函数,它通过 IBinder 访问通知中心,如下所示:-

public static async Task Run(string msg, IBinder binder, TraceWriter log)
{
    var genericInputMessage = JsonConvert.DeserializeObject<GenericInputMessage>(msg);
    string devicetag = "deviceid:" + genericInputMessage.device;
    var attribute = new NotificationHubAttribute
    {
        ConnectionStringSetting = "NotificationHubConnection",
        HubName = "NotificationHubName",
        TagExpression = devicetag
    };

    IAsyncCollector<Notification> notifications = binder.Bind<IAsyncCollector<Notification>>(attribute);
    ...
    ...
}

当通过 Azure 门户完成时,这可以编译并正常工作。

当我在使用 VS2017(版本 15.3.3)的预编译 Azure 函数中使用相同的代码并在本地运行它时,我在调用 binder.Bind 时遇到异常。

给出的例外是....

[23/09/2017 16:47:07] A ScriptHost error has occurred
[23/09/2017 16:47:07] Exception while executing function: DataProcessor. Microsoft.Azure.WebJobs.Host: No binding found for attribute 'Microsoft.Azure.WebJobs.NotificationHubAttribute'.

我预编译的Azure函数代码如下:-

public static async Task Run([EventHubTrigger("EventHubName", Connection = "EventHubConnection")]string msg, IBinder binder, TraceWriter log)
{
    var genericInputMessage = JsonConvert.DeserializeObject<GenericInputMessage>(msg);
    string devicetag = "deviceid:" + genericInputMessage.device;
    var attribute = new NotificationHubAttribute
    {
        ConnectionStringSetting = "NotificationHubConnection",
        HubName = "NotificationHubName",
        TagExpression = devicetag
    };

    IAsyncCollector<Notification> notifications = binder.Bind<IAsyncCollector<Notification>>(attribute);
    ...
    ...
}

我正在使用以下 NuGet 包:-

关于什么可能导致这种情况的任何想法?

【问题讨论】:

  • 根据您的描述,我可以在本地重现此问题。我找到了一个类似的issue,你可以参考一下。

标签: azure azure-functions


【解决方案1】:

这最终可能是由于运行时未正确检测通知中心的使用情况(因此未加载扩展程序)。通常,我们可以扫描 Function.json 以确定需要什么——但 IBinder 的使用更加不透明。

作为一种解决方法,您能否添加引用通知中心绑定的函数?它可以是手动触发,不需要实际调用。

这与https://github.com/Azure/azure-webjobs-sdk-script/issues/1637有关

【讨论】:

  • 添加了一个带有通知中心绑定的虚拟函数,这为我解决了这个问题。感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 2020-04-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-24
  • 1970-01-01
  • 1970-01-01
  • 2017-12-24
相关资源
最近更新 更多