无法从VS Code Azure功能连接到CosmosDB

时间:2018-06-04 12:55:02

标签: azure azure-functions azure-cosmosdb

我从C#HTTP模板创建了Azure Function(2.0v)。然后我根据CosmosDB docs添加了对CosmosDB的输出绑定:

public static class AddEvent

{
    [FunctionName("AddEvent")]
    public static void Run(

        [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)]
            HttpRequest req, 
        [CosmosDB("SomeDatabase", "SomeCollection", Id = "id", 
        ConnectionStringSetting = "myCosmosDB", CreateIfNotExists = true)] 
            out dynamic document)
    {
        document = new { Text = "something", id = Guid.NewGuid() };
    }
}

我使用的包(csproj文件):

<PackageReference Include="Microsoft.Azure.WebJobs.Extensions.CosmosDB" Version="3.0.0-beta7" />
<PackageReference Include="Microsoft.NET.Sdk.Functions" Version="1.0.11" />

这是我的local.settings.json。我将它们基于CosmosDB模拟器的值:

{
    "IsEncrypted": false,
    "Values": {
        "AzureWebJobsStorage": "UseDevelopmentStorage=true",
        "AzureWebJobsDashboard": "",
        "myCosmosDB": "AccountEndpoint=https://localhost:8081/;AccountKey=C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw=="
    }
}

不幸的是,当我点击HTTP触发器时,我得到:

System.Private.CoreLib: Exception while executing function: AddEvent.
Microsoft.Azure.WebJobs.Host: Exception binding parameter 'document'.
Microsoft.Azure.DocumentDB.Core: The type initializer for 'Microsoft.Azure.Documents.UserAgentContainer' threw an exception. 
Object reference not set to an instance of an object.

这个例外是什么意思?我找不到任何有关它的相关信息,它完全阻止了我的本地工作。没有CosmosDB属性,函数运行良好。

3 个答案:

答案 0 :(得分:3)

这是主机最新版本(2.0.11776)的回归。这已得到解决,目前正在发布。

答案 1 :(得分:2)

新cli应该是一个突破性的变化。尝试将cli降级为2.0.1-beta.25,它适用于我。顺便说一句,我建议您将Microsoft.NET.Sdk.Functions更新为1.0.13,以避免可能的异常。

beta.24似乎已过时,也会导致Method not found错误。虽然beta.26导致与beta.28相同的错误。

但是,如果我使用VS(使用beta.26 no-runtime version)直接调试项目或将其发布到Azure,则可以正常工作。已打开an issue on github,如果感兴趣,您可以跟踪它。

<强>更新

解决2.0.1-beta.29,运行时2.0.11857.0

答案 2 :(得分:-1)

您引用了哪个版本的DocumentDB软件包?

建议是:

将任何DocumentDB nuget降级为 1.13.2.

完全删除DocumentDB引用,而是直接引用Microsoft.Azure.WebJobs.Extensions.DocumentDB,它将为您引用正确的版本。