我正在尝试使用EventHub和Azure功能进行一些概念验证。我在C#中有一个Generic Webhook函数,我想将一条消息传递给我的EventHub。
我卡在“集成”选项卡上给出的参数名称上。如果我在参数中声明该名称,我必须给它一个类型。我无法弄清楚什么样的类型......我试过了:
我无法让它发挥作用。如果我不这样做,我收到错误消息: “缺少名为'outputEventHubMessage'的绑定参数”
如果我给它错误的类型,我收到消息: “错误索引方法'Functions.GenericWebhookCSharp1'.Microsoft.Azure.WebJobs.Host:无法绑定到参数。”
我可能在文档中有点丢失或者有点累,但我很感激这里有任何帮助!
/乔金姆
答案 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;
}