2017-10-04 51 views
0

我想创建一个Azure函数,它将传递给它的JSON正文并将此文档插入到Azure COSMOSDB实例中。使用CosmosDB文档输出创建HttpTrigger Azure函数时出错

要做到这一点,我在Azure的功能创造了这个功能门户: Azure Function configuration

并实行像这样的功能:

#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([email protected]"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", 
} 

,然后单击 '运行'

我立即遭到 portal IDE error

在门户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数据库实例中?

回答

1

对于异步功能,您应该使用IAsyncCollector

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

This编译但值得注意[根本不在文档中](https://www.screencast.com/t/ea0M4zMcyIcB)。 尚未运行它。 – bc3tech

+0

您可以在这里阅读有关Azure函数的更多信息https://docs.microsoft.com/en-us/azure/azure-functions/functions-reference-csharp。本文档讨论IAsyncCollector –

+0

谢谢@RafatSarosh。虽然文档中提到这种类型是你可以把东西放进去的东西,但是将它类型应用到每个绑定旁边(cosmosdb等)的描述会更便宜。因为我也可以使用“DocumentDB”作为绑定类型。另外,围绕它的所有CSX的东西让我完全忽略它;我在Visual Studio中开发。 – bc3tech

-2

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

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

将会给它一个镜头。然而,在门户网站开发意味着这不应该需要;输出参数及其名称在绑定中定义。 我也更新了我的代码;我试图*'动态的',但最初有'object'(根据文档) – bc3tech

+0

no can do: '2017-10-04T17:34:27.844函数'UploadDocumentToCosmos'的脚本已更改。 Reloading.' '2017-10-04T17:34:27.985 run.csx(6,103):error CS1988:异步方法不能有参考或输出参数' '2017-10-04T17:34:27.985编译失败.' – bc3tech

相关问题