【问题标题】:Error creating HttpTrigger Azure Function with CosmosDB document output使用 CosmosDB 文档输出创建 HttpTrigger Azure 函数时出错
【发布时间】:2017-10-04 17:15:05
【问题描述】:

我想创建一个 Azure 函数,该函数接受传递给它的 JSON 正文并将此文档插入到 Azure COSMOSDB 实例中。

为此,我在 Azure Functions 门户中创建了这个函数:

然后像这样实现函数:

#r "Newtonsoft.Json"
using Newtonsoft.Json.Linq;

using System.Net;

public static async Task<HttpResponseMessage> Run(HttpRequestMessage req, TraceWriter log, object outputDocument)
{
    var requestContent = await req.Content.ReadAsStringAsync();
    log.Verbose($@"Received request:\n{requestContent}");

    var newDoc = JObject.Parse(requestContent);
    newDoc["Id"] = Guid.NewGuid().ToString();
    newDoc["shardKey"] = newDoc.Value<string>(@"Id").Substring(8);

    outputDocument = newDoc;

    return req.CreateResponse(System.Net.HttpStatusCode.Created);
}

在门户中,我放了一个简单的示例文档:

{
  "prop1": 2,
  "prop2": "2017-02-20",
}

然后点击“运行”

我马上就遇到了

作为门户 IDE 中的叠加层以及

{
  "id": "145ee924-f824-4064-8364-f96dc12ab138",
  "requestId": "5a27c287-2c91-40f5-be52-6a79c7c86bc2",
  "statusCode": 500,
  "errorCode": 0,
  "message": "'UploadDocumentToCosmos' can't be invoked from Azure WebJobs SDK. Is it missing Azure WebJobs SDK attributes?"
}

在日志区域。

我似乎无法解决这个问题,但我确实觉得我做的一切都是正确的。

我需要做什么才能简单地将 JSON 对象作为 HTTP 请求发送到 Azure 函数,并将所述对象插入/插入到 Azure Cosmos DB 实例中??

【问题讨论】:

    标签: azure azure-functions azure-cosmosdb


    【解决方案1】:

    对于异步函数,您应该使用IAsyncCollector

    public static async Task<HttpResponseMessage> Run(
        HttpRequestMessage req, TraceWriter log, 
        IAsyncCollector<object> outputDocuments)
    {
        ...
        await outputDocuments.AddAsync(newDoc);
    }
    

    【讨论】:

    • 这个编译但值得注意isn't in the documentation at all。还没有运行它。
    • 您可以在此处docs.microsoft.com/en-us/azure/azure-functions/… 阅读有关 Azure Functions 的更多信息。本文档讨论 IAsyncCollector
    • 感谢@RafatSarosh。虽然文档提到该类型是您可以放入的东西,但在它适用的每个绑定(cosmosdb 等)旁边拼出该类型会更实惠。因为我也可以使用“DocumentDB”作为绑定类型。此外,所有 CSX 的东西都围绕着它让我完全忽略了它。我在 Visual Studio 中进行开发。
    【解决方案2】:

    您可以尝试将out 添加到dynamic outputDocument 吗?

    public static async Task<HttpResponseMessage> Run(HttpRequestMessage req, TraceWriter log, out dynamic outputDocument)
    

    【讨论】:

    • 会试一试。但是,在门户中开发意味着不需要这样做;输出参数及其名称在绑定中定义。我还更新了我的代码;我尝试 dynamic 但最初有object(根据文档)
    • 不行:2017-10-04T17:34:27.844 Script for function 'UploadDocumentToCosmos' changed. Reloading.2017-10-04T17:34:27.985 run.csx(6,103): error CS1988: Async methods cannot have ref or out parameters2017-10-04T17:34:27.985 Compilation failed.
    猜你喜欢
    • 1970-01-01
    • 2020-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多