Azure 函数的 Azure Cosmos DB 输入绑定不起作用

csg*_*csg 20 azure-functions azure-cosmosdb

我正在学习微软的演练,学习如何使用 CosmosDb 为 azure 函数添加输入绑定,但是在调用该函数时,它不断返回内部服务器错误(500 http 代码)。

function.json 中 azure 函数的配置是:

{
  "bindings": [
    {
      "authLevel": "function",
      "type": "httpTrigger",
      "direction": "in",
      "name": "Request",
      "methods": [
        "get",
        "post"
      ]
    },
    {
      "type": "http",
      "direction": "out",
      "name": "Response"
    },
    {
      "name": "bookmark",
      "direction": "in",
      "type": "cosmosDB",
      "databaseName": "func-io-learn-db",
      "collectionName": "Bookmarks",
      "connectionStringSetting": "learn_DOCUMENTDB",
      "id": "{id}",
      "partitionKey": "{id}",
      "sqlQuery": ""
    }
  ]
}

Run Code Online (Sandbox Code Playgroud)

应用程序服务中有一个learn_DOCUMENTDB配置设置,它具有到 cosmos db 实例的有效连接字符串(自动创建)。

错误日志条目说:

无法将 CosmosDB 绑定到类型“System.String”。可能的原因:1) 尝试绑定到 'Microsoft.Azure.Documents.Client.DocumentClient, Microsoft.Azure.DocumentDB.Core, Version=2.9.2.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' 但用户类型程序集是 'System.String , System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e。

我做错了什么吗?

小智 31

我遇到了同样的问题,结果新 UI 生成了与旧 UI 不同的绑定。

新用户界面:

{
  "name": "bookmark",
  "direction": "in",
  "type": "cosmosDB",
  "databaseName": "func-io-learn-db",
  "collectionName": "Bookmarks",
  "connectionStringSetting": "learn-0088a129-899f-4d18-b4db-5fa74daf1cc3_DOCUMENTDB",
  "id": "{id}",
  "partitionKey": "{id}",
  "sqlQuery": ""
}
Run Code Online (Sandbox Code Playgroud)

旧用户界面:

{
  "type": "cosmosDB",
  "name": "bookmark",
  "databaseName": "func-io-learn-db",
  "collectionName": "Bookmarks",
  "connectionStringSetting": "learn-0088a129-899f-4d18-b4db-5fa74daf1cc3_DOCUMENTDB",
  "id": "{id}",
  "partitionKey": "{id}",
  "direction": "in"
}
Run Code Online (Sandbox Code Playgroud)

删除

"sqlQuery": ""
Run Code Online (Sandbox Code Playgroud)

绑定的一部分为我修复了它。

您可以切换回旧版界面点击“有问题?点击回到经典的功能应用的管理经验”的应用服务概述页面上,你可以看到在这里

  • 我的更令人困惑,因为我的“id”参数甚至没有生成,我必须添加它才能开始工作,却发现教程一开始就没有提到任何有关添加它的内容! (2认同)

小智 29

对于仍在寻找这一点的任何人,如果上述解决方案不能解决问题。

我遇到了同样的问题,无法检索到数据。按照上面的建议检查了 function.json。问题不在于“sqlQuery”参数。

根据 Microsoft Learn 上的教程,在创建 Input DB 绑定时,我已将绑定和分区 ID 值设置为“id”和“/id”。这在 function.JSON 文件中按原样显示。所以我的 JSON 文件看起来像:“id”:“id”,“partitionKey”:“/id”

查看上述答案后,我将数据库的 function.JSON Bindings 更改为如下所示:

  "id": "{id}",
  "partitionKey": "{id}"
Run Code Online (Sandbox Code Playgroud)

只有在此更改之后它才开始工作。


Agu*_*tis 8

手动将 function.json 更新为:

 "id": "{id}",
 "partitionKey": "{id}",
Run Code Online (Sandbox Code Playgroud)

对我有用,但是一旦调用或保存该函数,它就会将更改恢复为:

  "id": "id",
  "partitionKey": "/id",
Run Code Online (Sandbox Code Playgroud)

并再次停止工作。我可以让它保留更改的唯一方法是像这样编辑集成部分: 输入绑定 的设置然后设置工作。