【发布时间】:2023-03-12 12:07:01
【问题描述】:
我正在创建一个通用的WebHook 触发函数。我正在尝试将输出绑定添加到 Azure 队列存储。从文档中,我看到此输出支持 CloudQueue 类型。但是当我在门户中运行以下代码时:
public static async Task<HttpResponseMessage> Run(HttpRequestMessage req, TraceWriter log, CloudQueue outputQueueItem)
{
log.Info("C# HTTP trigger function processed a request.");
}
它返回一个错误:
错误 CS0246:找不到类型或命名空间名称“CloudQueue”(您是否缺少 using 指令或程序集引用?)
当我使用以下代码运行从 Visual Studio 发布的新 webhook 函数时:
namespace My.Azure.FunctionApp
{
public static class SurveyWebHook
{
[FunctionName("SurveyWebHook")]
public static async Task<object> Run([HttpTrigger(WebHookType = "genericJson")]HttpRequestMessage req,
CloudQueue outputQueueItem, TraceWriter log)
{
log.Info($"Survey received");
return req.CreateResponse(HttpStatusCode.OK, new
{
message = $"Survey received"
});
}
}
}
它返回一个错误:
“无法从 Azure WebJobs SDK 调用‘SurveyWebHook’。是否缺少 Azure WebJobs SDK 属性?”
如何将CloudQueue 类型变量作为输出绑定添加到我的WebHook 函数?
更新:
当我使用IBinder 时输入:
namespace My.Azure.FunctionApp
{
public static class SurveyWebHook
{
[FunctionName("SurveyWebHook")]
public static async Task<object> Run([HttpTrigger(WebHookType = "genericJson")]HttpRequestMessage req, IBinder binder, TraceWriter log)
{
log.Info($"Survey received");
string jsonContent = await req.Content.ReadAsStringAsync();
CloudQueue outputQueue = await binder.BindAsync<CloudQueue>(new QueueAttribute("surveys"));
await outputQueue.AddMessageAsync(new CloudQueueMessage("Test Message"));
return req.CreateResponse(HttpStatusCode.OK, new
{
message = $"Survey received"
});
}
}
}
它不会返回错误。但它也不会将消息放入队列。
当我使用[Queue("myqueue")] CloudQueue 时也会发生同样的情况。
它仅在我使用IAsyncCollector<T>时有效
更新:
最后,我明白了为什么我没有在队列中看到消息。
当我从 Visual Studio 发布 Azure Functions 项目时,它会将 "configurationSource": "attributes" 参数添加到 function.json。这将覆盖我在输出绑定中的 connection 参数,以绑定到我的 Function App 服务的默认存储帐户。我的队列是在这个默认存储帐户中创建的。我删除了configurationSource 参数,我的函数开始按预期工作。
【问题讨论】:
-
您的活页夹示例对我来说很好用
标签: c# azure azure-functions