我从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属性,函数运行良好。
答案 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,它将为您引用正确的版本。