2017-09-23 5 views
0

で失敗し、次のように私は、IBinderを通じて通知ハブにアクセスAzureの機能を持っている: -プリコンパイルAzureの機能は、「いいえ結合属性が見つかり、」例外

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); 
    ... 
    ... 
} 

これは、コンパイルして、[OK]を動作します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パッケージを使用しています: -

NuGet packages

これを引き起こす可能性のあるアイデアはありますか?

+0

に関連している

、私は私のローカル側でこの問題を再現することができます。私は同様の[issue](https://github.com/Azure/azure-webjobs-sdk/issues/1295)を見つけました。あなたはそれを参照することができます。 –

答えて

0

これは最終的に、ランタイムがNotification Hubの使用を適切に検出していないため(拡張機能をロードしていないことが原因)可能性があります。通常、Function.jsonをスキャンして何が必要かを判断することができますが、IBinderの使用はより不透明です。

回避策として、通知ハブバインディングを参照する関数を追加できますか?これは手動トリガとなり、実際に呼び出される必要はありません。これはあなたの説明に基づいてhttps://github.com/Azure/azure-webjobs-sdk-script/issues/1637

+0

Notification Hubバインディングでダミー関数を追加しました。これにより、この問題が解決されました。助けてくれてありがとう! – Martin

関連する問題