#c# #azure #azure-functions
#c# #лазурь #azure-функции
Вопрос:
В настоящее время я внедряю приложение функций Azure, которое предоставляет несколько функций (в основном gets).
Похоже, что в следующем коде есть проблема:
using System; using System.Collections.Specialized; using System.Net; using Microsoft.Azure.Functions.Worker; using Microsoft.Azure.Functions.Worker.Http; using Microsoft.Extensions.Logging; using System.Net.Http; using InternalVacanciesAzureFunction.Model; using Microsoft.Extensions.Options; using System.Text.Json; using System.Collections.Generic; namespace IVAFunction { public class PostFunction { private readonly HttpClient _httpClient; public PostFunction(IHttpClientFactory httpClientFactory) { _httpClient = httpClientFactory.CreateClient(); } [Function("postFunction")] public HttpResponseData Run([HttpTrigger(AuthorizationLevel.Anonymous, "post", "put")] HttpRequestData req, FunctionContext executionContext) { ILogger logger = executionContext.GetLogger("PostFunction"); logger.LogError("Code hit: PostFunction.cs"); HttpResponseData response = req.CreateResponse(); string body = new System.IO.StreamReader(req.Body).ReadToEnd(); JsonResponse data = Nfunction.postFunction(_httpClient, "/PostFunction", body, logger, requestPrincipalName); if (data.responseType.Equals(ResponseType.OK)) { response.StatusCode = HttpStatusCode.OK; } else { response.StatusCode = HttpStatusCode.InternalServerError; } response.Headers.Add("Content-Type", "application/json; charset=utf-8"); response.WriteString(data.json); return response; } } }
Данные, отправляемые в эту функцию, представляют собой JSON, включающий строку в кодировке BASE64 в двух полях. Максимальный размер каждого из этих двух полей составляет 1,5 МБ. Каждый раз, когда я публикую что-то маленькое, например, 2 x 400B, все идет нормально. Но когда я отправил что-то вроде 2 x 900 Кб, запись в журнале появилась вот так:
2021-12-07T07:42:28.455 [Отладка] Запрос успешно совпал с маршрутом с именем «Постфункция» и шаблоном «api/постфункция»
2021-12-07T07:42:29.129 [Информация] Выполнение «Функции.Постфункция» (Причина= » Эта функция была вызвана программным способом через API хоста.», Идентификатор=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
Код регистратора «Попадание кода» никогда не попадает, и через некоторое время функция отключается.
Кто-нибудь имеет представление о том, что происходит? Я могу воспроизвести проблему как в своей локальной среде разработки, так и в реальной Azure.
Комментарии:
1. Вы не превышаете лимит в 100 МБ на запрос, так что я бы не беспокоился об этом. Рекомендуется использовать учетную запись хранилища, если вы когда-либо превысите 100 МБ. Но это не ваша ситуация. Вы знаете, где находится предел? Это такое число, как 1024 КБ? Или 2048 Кб? Я знаю, что для ASP.NET вы можете настроить размер буфера, так что, возможно, это то, что вы можете сделать здесь? У вас есть функция построения? На ум приходит HttpClient.MaxResponseContentBufferSize. Мне приходилось играть с этим в прошлом
2. Я только что сделал открытие. Всякий раз, когда я добавляю точку останова в строку внутри конструктора (на: _httpClient = HttpClientFactory. createClient();) и, таким образом, немного задерживает выполнение кода, код просто отлично работает. Я думаю, что это какая-то проблема со временем.
3. Вы можете попробовать использовать одноэлементный экземпляр HttpClient или переместить часть создания клиента внутри функции.
Ответ №1:
У вас там много отсутствующих директив или ссылок на сборку, за исключением того, что последнее }
не требуется.
Комментарии:
1. Вы правы. Добавлен весь код