在Azure功能中创建Azure EventHub消息

时间:2016-05-28 21:46:34

标签: azure-eventhub azure-functions

我正在尝试使用EventHub和Azure功能进行一些概念验证。我在C#中有一个Generic Webhook函数,我想将一条消息传递给我的EventHub。

我卡在“集成”选项卡上给出的参数名称上。如果我在参数中声明该名称,我必须给它一个类型。我无法弄清楚什么样的类型......我试过了:

  • 字符串(其他功能与方向一起使用,不适用于webhooks)。
  • EVENTDATA
  • IEnumerable

我无法让它发挥作用。如果我不这样做,我收到错误消息: “缺少名为'outputEventHubMessage'的绑定参数”

如果我给它错误的类型,我收到消息: “错误索引方法'Functions.GenericWebhookCSharp1'.Microsoft.Azure.WebJobs.Host:无法绑定到参数。”

我可能在文档中有点丢失或者有点累,但我很感激这里有任何帮助!

/乔金姆

1 个答案:

答案 0 :(得分:3)

您可能只是错过了参数上的out关键字。下面是一个有效的WebHook函数,它声明了一个out string message参数,该参数映射到EventHub输出,并通过message = "Test Message"写入一条EventHub消息。

因为异步函数不能返回参数,所以我使这个函数同步(返回object而不是Task<object>)。如果要保持异步,而不是使用out参数,则可以绑定到IAsyncCollector<string>参数。然后,您可以通过调用收集器上的AddAsync方法将一个或多个消息排入队列。

有关EventHub绑定及其支持类型的更多详细信息,请参见here。请注意,其他绑定遵循相同的一般模式。

#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;
}