2

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

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

  • 字符串(其他函数与方向一起使用,不适用于 webhook)。
  • 事件数据
  • IEnumerable

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

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

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

/乔金

4

1 回答 1

3

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

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

有关 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 回答