代码之家  ›  专栏  ›  技术社区  ›  Souvik Ghosh

在Azure函数中引用cosmos db nuget包

  •  0
  • Souvik Ghosh  · 技术社区  · 7 年前

    我正在尝试在我的Azure函数应用程序中使用Cosmos DB文档客户端。我遵循了这里提到的步骤- How can I use NuGet packages in my Azure Functions?

    我对project.json有依赖性-

    {
      "frameworks": {
        "net46":{
          "dependencies": {
            "Microsoft.Azure.DocumentDB.Core": "2.1.3"
          }
        }
       }
    }
    

    project.json被放置在函数app中,app服务编辑器路径如下-

    https://<functionappname>.scm.azurewebsites.net/dev/wwwroot/<functionname>/project.json

    这是我的功能代码-

    #r "Newtonsoft.Json"
    #r "Microsoft.Azure.Documents.Client"
    
    using System.Net;
    using Microsoft.AspNetCore.Mvc;
    using Microsoft.Extensions.Primitives;
    using Newtonsoft.Json;
    
    using System.Net.Http;
    using System.Threading.Tasks;
    using System.Net.Http.Formatting;
    using System.Threading;
    using Microsoft.Azure.Documents;
    using Microsoft.Azure.Documents.Client;
    
    
    public static async Task<IActionResult> Run(HttpRequest req, ILogger log)
    {
        string endPoint = <ep>;
        string databaseId = <dbID>;
        string collectionId = <cid>;
        string documentId = <did>;
        string resourceLink = string.Format("dbs/{0}/colls/{1}/docs/{2}", databaseId, collectionId, documentId);
        string primaryKey = <pk>;
        IDocumentClient documentClient = new DocumentClient(new Uri(endPoint), primaryKey);
    
        var response = documentClient.ReadDocumentAsync(resourceLink).Result;
        return new OkObjectResult(response);
    }
    

    当我保存并运行应用程序时,不会收到任何错误或响应。如果我删除cosmossdb参考代码,它就会工作。下面是代码-

    #r "Newtonsoft.Json"
    
    using System.Net;
    using Microsoft.AspNetCore.Mvc;
    using Microsoft.Extensions.Primitives;
    using Newtonsoft.Json;
    
    using System.Net.Http;
    using System.Threading.Tasks;
    using System.Net.Http.Formatting;
    using System.Threading;
    
    
    public static async Task<IActionResult> Run(HttpRequest req, ILogger log)
    {
        return new OkObjectResult("response");
    }
    

    我是错过了什么,还是做得不正确?如果我在控制台应用程序上使用它,同样的代码也可以工作。有什么帮助吗?

    2 回复  |  直到 7 年前
        1
  •  0
  •   Jerry Liu Phantom    7 年前

    函数2.0使用 function.proj 如下所示。

    <Project Sdk="Microsoft.NET.Sdk">
        <PropertyGroup>
            <TargetFramework>netstandard2.0</TargetFramework>
        </PropertyGroup>
        <ItemGroup>
            <PackageReference Include="Microsoft.Azure.DocumentDB.Core" Version="2.1.3"/>
        </ItemGroup>
    </Project>
    

    并去掉多余的 #r "Microsoft.Azure.Documents.Client" 因为程序集已添加。

        2
  •  1
  •   Matias Quaranta    7 年前

    若要在门户中工作,请使用 Cosmos DB Trigger ,这将把cosmos-db扩展拉入函数app,然后您可以删除创建的函数并创建一个新的函数并拉 DocumentClient :

    Searching for Trigger

    Adding the Extension

    一旦添加了扩展名,就可以拉客户端添加 #r "Microsoft.Azure.DocumentDB.Core" 在函数代码的顶部:

    #r "Newtonsoft.Json"
    #r "Microsoft.Azure.DocumentDB.Core"
    
    using System.Net;
    using Microsoft.AspNetCore.Mvc;
    using Microsoft.Extensions.Primitives;
    using Newtonsoft.Json;
    using Microsoft.Azure.Documents;
    using Microsoft.Azure.Documents.Client;
    
    private static DocumentClient client = new DocumentClient(new Uri("yourendpoint"), "yourkey");
    
    
    public static async Task<IActionResult> Run(HttpRequest req, ILogger log)
    {
        log.LogInformation("C# HTTP trigger function processed a request.");
    
        string name = req.Query["name"];
    
        string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
        dynamic data = JsonConvert.DeserializeObject(requestBody);
        name = name ?? data?.name;
    
        return name != null
            ? (ActionResult)new OkObjectResult($"Hello, {name}")
            : new BadRequestObjectResult("Please pass a name on the query string or in the request body");
    }
    
    推荐文章