2017-09-01 3 views
0

処理方法が不明なAzureサービスバス出力バインディングに問題があります。私は同じような質問を見つける運がなかったので、これは重複している場合は謝罪します。Azure関数のサービスバス出力バインディングでエラーが発生しました

ローカルのVS2017開発プロセスを使用しようとしていますので、function.jsonバインディングを自動的に生成する必要があります。関数の署名は次のとおりです。

[FunctionName("RequestNewPaladinInvitation")] 
    public static HttpResponseMessage Run(
    [HttpTrigger(AuthorizationLevel.Anonymous, "post")]HttpRequestMessage req, 
    [ServiceBus("thequeue")] ICollector<Invitation> invitationOutputQueue, 
    TraceWriter log) 
    { 
    //Do some stuff and write to the queue 
    invitationOutputQueue.Add(invite); 
    } 

関数をローカルで実行すると、次のエラーが発生します。

Microsoft.Azure.WebJobs.Host:エラーインデックス方法 'RequestNewPaladinInvitation.Run'。 Microsoft.Azure.WebJobs.Host: パラメータ 'invitationOutputQueue'をICollector`1にバインドできません。 パラメータTypeがバインディングでサポートされていることを確認してください。あなたが のバインディング拡張機能(ServiceBus、Timersなど)を使用している場合は、 スタートアップコードの内線番号の登録メソッドを呼び出していることを確認してください(例:config.UseServiceBus()、config.UseTimers )など)。 次のように[2017年9月1日午前五時42分49秒PM]エラーインデックスメソッド が 'RequestNewPaladinInvitation.Run'

私host.jsonとlocal.settings.json両方が定義されています。

{ 
    "IsEncrypted": false, 
    "Values": { 
     "AzureWebJobsStorage": "<MyStorageAccountInfo>", 
     "AzureWebJobsDashboard": "<MyDashboardInfo>", 
     "AzureWebJobsServiceBus": "<MyServiceBusConnectionString>" 
    } 
} 

AzureWebJobsServiceBusの値を定義すると、その機能のアプリケーション全体の任意のServiceBusバインディングに対するデフォルトのServiceBusAccountになります。

また、次の代替属性[ServiceBus("createpaladininvitation",Connection = "ServiceBus")]を持つアカウントの接続文字列にServiceBusバインディングを明示的に指定してみました。大会の私の理解は、プロパティのAzureWebJobsの部分を含めるべきではないということです。私が誤解した場合に備えて、[ServiceBus("createpaladininvitation",Connection = "AzureWebJobsServiceBus")]も試しました。私はさらに、メソッドとパラメータの両方を次の属性、[ServiceBusAccount("ServiceBus")]で修飾しようとしました。また、ServiceBus属性のConnectionパラメータと同じバリエーションを試しました。

すべての場合、ServiceBus出力バインディングに対して生成されたバインディングがないことを示す同じfunction.json出力が表示されます。ここで

はfunction.jsonです:

{ 
    "generatedBy": "Microsoft.NET.Sdk.Functions-1.0.0.0", 
    "configurationSource": "attributes", 
    "bindings": [ 
    { 
     "type": "httpTrigger", 
     "methods": [ 
     "post" 
     ], 
     "authLevel": "anonymous", 
     "name": "req" 
    } 
    ], 
    "disabled": false, 
    "scriptFile": "..\\bin\\AzureFunctionsPoc.dll", 
    "entryPoint": "AzureFunctionsPoc.RequestNewPaladinInvitation.Run" 
} 

私は何かを明らかに欠けているように感じます。

私が起こっているのかを把握し続けることを試みたとして[更新]

は、私は、ローカルの機能を実行し、生成されたfunction.jsonファイルを編集し、私はが生成されているはずだと思うというバインディングを追加しました。その結果、手動で編集function.jsonは次のとおりです。これらの編集で

{ 
    "generatedBy": "Microsoft.NET.Sdk.Functions-1.0.0.0", 
    "configurationSource": "attributes", 
    "bindings": [ 
    { 
     "type": "httpTrigger", 
     "methods": [ 
     "post" 
     ], 
     "authLevel": "anonymous", 
     "name": "req" 
    }, 
    { 
     "type": "serviceBus", 
     "name": "invitationOutputQueue", 
     "queueName": "createpaladininvitation", 
     "connection": "ServiceBus", 
     "direction": "out" 
    } 
    ], 
    "disabled": false, 
    "scriptFile": "..\\bin\\AzureFunctionsPoc.dll", 
    "entryPoint": "AzureFunctionsPoc.RequestNewPaladinInvitation.Run" 
} 

、予想通りの方法が正確に動作します。

これは、私が紛失している構文や大会の問題、またはツールのバグのように感じます。

+0

[この質問と同様](https://stackoverflow.com/questions/45986719/using-azure-functions-in-vs2017-cannot-bind-to-servicebus-queue-as-an-output) ) – Mikhail

+0

@Mikhail - あなたがリンクした質問をすばやく見ました。それは同様のようでした。しかし、私の場合、その質問とは異なり、トリガーのタイプを変更しても差は見られませんでした。しかし、それを指摘していただきありがとうございます。 –

答えて

3

現在ServiceBusの出力トリガに関して、顕著なツールバグがあります。 Service Bus output binding issue

、ここを::Latest v1.0.0 not working with ServiceBus. alpha 6 still works.

これはに関連しているあなたはここでは関係GitHubの問題を参照してくださいツーリング

とだけではない、ローカルに、Azureの機能にアプリケーションを「展開」場合、それは動作します怠惰な負荷。我々は、サービスバスの拡張、したがってインデックスエラーをピックアップしていません。 (Azure/azure-webjobs-sdk-script#1637)

その理由は、ServiceBusの拡張機能が他の機能と異なるからです。拡張機能には、IExtensionConfigProviderを実装するパブリックなパラメータのない設定オブジェクトが必要です。

SBは内部(https://github.com/Azure/azure-webjobs-sdk/blob/663a508e8a851629c26a51e7de3af36629dfd120/src/Microsoft.Azure.WebJobs.ServiceBus/Config/ServiceBusExtensionConfig.cs#L17)なので、ExportedTypesのスキャンではそれを見逃していました(https://github.com/Azure/azure-webjobs-sdk-script/blob/b1445485807bb190ba0716af1a8dc81a864b5228/src/WebJobs.Script/Host/ScriptHost.cs#L735参照)。 SBのconfigにはパラメータなしのctorがないため、Activator.createInstanceも失敗します。 この修正プログラム(スクリプト実行時に作成したもの)Azure/azure-webjobs-sdk-script#1804で修正されます。それはCLIに引き出される必要があります。

+0

ありがとうございました!私はちょうどこれに適したレポを見つけることができなかった。 –

関連する問題