Ссылка на пакет Nuget для базы данных Cosmos в функциях Azure - PullRequest
0 голосов
/ 29 ноября 2018

Я пытаюсь использовать клиент документа Cosmos DB в приложении-функции Azure.Я выполнил шаги, упомянутые здесь - Как я могу использовать пакеты NuGet в своих функциях Azure?

У меня есть зависимость в project.json-

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

project.json находится внутри приложения функции, а путь редактора службы приложения выглядит следующим образом:

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);
}

КогдаЯ сохраняю и запускаю приложение, я не получаю никакой ошибки или ответа.Если я удаляю ссылочные коды CosmosDB, это работает.Ниже приведен код -

#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 ]

0 голосов
/ 30 ноября 2018

Для работы в портале проще, если вы добавите функцию с Cosmos DB Trigger, которая будет загружать расширение Cosmos DB в приложение Function, а затем вы можете удалить созданную функцию, создать новую и нажать 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");
}
0 голосов
/ 29 ноября 2018

Функция 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", когда сборка была добавлена.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...