Функция Azure После C# не выполняется с большим телом

#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. Вы правы. Добавлен весь код