C#Azure功能:无法使用CloudQueue类型作为输出绑定

时间:2017-09-15 11:45:28

标签: c# azure azure-functions

我正在创建一个通用的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:类型或命名空间名称&#39; CloudQueue&#39;找不到(你错过了使用指令或汇编引用吗?)

当我运行从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"
            });
        }
    }
}

它给我一个错误:

  

&#34;&#39; SurveyWebHook&#39;无法从Azure WebJobs SDK调用。是否缺少Azure WebJobs SDK属性?&#34;

如何将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。这将覆盖输出绑定到我的Function App服务的默认存储帐户的connection参数。我的队列是在此默认存储帐户中创建的。我删除了configurationSource参数,我的功能开始按预期工作。

1 个答案:

答案 0 :(得分:1)

要使您的第一个示例正常工作,请修复参考 - 将这些行添加到顶部:

#r "Microsoft.WindowsAzure.Storage"

using Microsoft.WindowsAzure.Storage.Queue;

要使您的第二个示例正常工作,请使用CloudQueue标记QueueAttribute参数:

[FunctionName("SurveyWebHook")]
public static async Task<object> Run(
    [HttpTrigger(WebHookType = "genericJson")] HttpRequestMessage req,
    [Queue("myqueue")] CloudQueue outputQueueItem, 
    TraceWriter log)