Внутренняя ошибка сервера 500 только по запросу с большими объемами данных в функциях Azure

#c# #azure #azure-functions

#c# #azure #azure-функции

Вопрос:

У меня есть следующая функция Azure:

     public static async Task<IActionResult> Run(
        [HttpTrigger(AuthorizationLevel.Function, "post", Route = null)] HttpRequest req,
        ILogger log, ExecutionContext context)
    {
        GetForumTopicsResponseModel forumTopicsModel = new GetForumTopicsResponseModel();
        try
        {
            HtpaaForumDB.HtpaaForumDB forumDB = new HtpaaForumDB.HtpaaForumDB(context);
            string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
            GetForumTopicsTokenRequestModel reqMod = JsonConvert.DeserializeObject<GetForumTopicsTokenRequestModel>(requestBody);

            log.LogInformation("index:"   reqMod.IndexStart   " count:"   reqMod.Count);
            List<Topic> topics = await forumDB.GetTopics(reqMod.SortOrder, reqMod.IndexStart, reqMod.Count);
            log.LogInformation("Count:"   topics.Count);
            forumTopicsModel.Topics = topics;
            forumTopicsModel.StatusCode = HttpStatusCode.OK;
        }
        catch (Exception ex)
        {
            log.LogCritical(ex,"Error");
            forumTopicsModel.Message = ex.Message;
            forumTopicsModel.StatusCode = HttpStatusCode.BadRequest;
        }
        return new ObjectResult(forumTopicsModel);
 

Все работает, как и ожидалось, когда я запрашиваю 2 темы форума, но выдает мне ошибку 500, если я запрашиваю больше. Журнал, по-видимому, указывает на то, что внутри функции все идет по плану:

 2020-11-23T12:17:00.716 [Information] Executing 'GetForumTopics' (Reason='This function was programmatically called via the host APIs.')
2020-11-23T12:17:00.758 [Information] index:0 count:2
2020-11-23T12:17:00.847 [Information] Count:2
2020-11-23T12:17:00.854 [Information] Executed 'GetForumTopics' (Succeeded, Duration=138ms)
 

Приведенный выше журнал приводит к коду 200 и набору данных, как и ожидалось

 2020-11-23T12:14:05.133 [Information] Executing 'GetForumTopics' (Reason='This function was programmatically called via the host APIs.', )
2020-11-23T12:14:05.962 [Information] index:0 count:20
2020-11-23T12:14:11.318 [Information] Count:10
2020-11-23T12:14:11.319 [Information] Executed 'GetForumTopics' (Succeeded, Duration=6220ms)
 

Приведенный выше журнал приводит к коду 500 и отсутствию данных (тело ответа пустое).

Есть идеи, что я делаю не так?

Комментарии:

1. Когда вы говорите «нет данных» , вы имеете в виду, что нет тела ответа с ошибкой 500 или что вы не получаете ожидаемые данные? Я бы обязательно проверил, есть ли какое-либо тело ответа, поскольку это может дать вам подсказки относительно того, что не так.

2. При отсутствии данных я имею в виду, что тело ответа пустое.

Ответ №1:

оказалось, что это связано с циклической зависимостью в моей модели EF. Удивительно, что это сработало в моих модульных тестах, но не удалось выполнить сериализацию JSON