2

EventHub と Azure Functions を使用して概念実証を試みています。EventHub にメッセージを渡したい C# のジェネリック Webhook 関数があります。

「統合」タブで指定されたパラメーター名に行き詰まります。パラメータの中でその名前を宣言する場合、型を指定する必要があります。しかし、どのようなタイプかわかりません...私は試しました:

  • 文字列 (他の関数はそれを方向と一緒に使用します。Webhook には適用されません)。
  • イベントデータ
  • IEnumerable

私はそれを働かせることができません。これを行わないと、「'outputEventHubMessage' という名前のバインディング引数がありません」というエラー メッセージが表示されます。

間違った型を指定すると、「メソッド 'Functions.GenericWebhookCSharp1' のインデックス付けエラー。Microsoft.Azure.WebJobs.Host: パラメーターにバインドできません。」

私はおそらくドキュメンテーションで少し迷っているか、少し疲れていますが、ここで何か助けていただければ幸いです!

/ヨアキム

4

1 に答える 1

3

outパラメータのキーワードが欠落している可能性があります。以下は、EventHubout string message出力にマップされるパラメーターを宣言し、 を介して EventHub メッセージを書き込むWebHook 関数ですmessage = "Test Message"

非同期関数は out パラメーターを返すことができないため、この関数を同期にしました (objectではなく を返しますTask<object>)。パラメータを使用するのではなく、非同期のままにしたい場合は、out代わりにパラメータにバインドできIAsyncCollector<string>ます。AddAsyncその後、コレクターでメソッドを呼び出して、1 つ以上のメッセージをキューに入れることができます。

EventHub バインディングとそれがサポートする型の詳細については、こちらを参照してください。他のバインディングも同じ一般的なパターンに従うことに注意してください。

#r "Newtonsoft.Json"

using System;
using System.Net;
using Newtonsoft.Json;

public static object Run(HttpRequestMessage req, out string message, TraceWriter log)
{
    string jsonContent = req.Content.ReadAsStringAsync().Result;
    dynamic data = JsonConvert.DeserializeObject(jsonContent);

    log.Info($"Webhook was triggered! Name = {data.first}");

    message = "Test Message";

    var res = req.CreateResponse(HttpStatusCode.OK, new {
        greeting = $"Hello {data.first} {data.last}!"
    });

    return res;
}
于 2016-05-29T15:49:54.157 に答える