Передача больших наборов данных через RESTFUL API? - PullRequest
0 голосов
/ 11 февраля 2019

Цель состоит в том, чтобы улучшить код.

Клиентское приложение ASP.NET MVC отправляет HTTP-запрос на уровень сервиса.

Это API-интерфейс REST C #, в который мы передаем большие наборы данных.к другому REST API, который является уровнем базы данных.Репозиторий базы данных выполняет вставки в нормализованные таблицы.Например: новые заказы клиентов, платежи клиентов, платежи, заказы и т. Д.

Поскольку у нас большой набор данных, первым вариантом было разделить их на небольшие куски, разделив их на 1000 клиентов в одной партии.Который отправляется партиями.

  1. Все методы в коде реализуют async / await
  2. Установить HttpClient Время ожидания на TimeSpan.FromMinutes(2.1)

У нас была ситуация, когда процесс не удался раньшеВставка всех партий.Ошибка была DEADLOCK .Это происходит из-за конфликтов, когда одна хранимая процедура INSERT ожидает освобождения другой хранимой процедуры.Так как мои вставки находятся в круглой замковой цепи.Например, если бы у меня было 10 партий.9 Пакеты были вставлены, и последний не удалось ошибки SQL DEADLOCK.

Пожалуйста, предоставьте рекомендации или предложения для обработки больших данных передачи.int actualorderRequestsYetToProcess = 6, где мои Пакеты разделены

Будет ли хорошим вариантом применить механизм повторных попыток, если какой-либо запрос не будет выполнен?

открытый класс FirstService {частная асинхронная задача> PutCustomerOrders(IEnumerable orderRequestList) {foreach (запрос OrderRequest в actualorderRequestsYetToProcess) {

        CustomerOrdersResponse orderResponse = null;
        using (HttpClient client = _httpClient.GetHttpClient(user, culture))
        {
            client.BaseAddress = new Uri(_ServiceURL + "/orderRequest");
            client.DefaultRequestHeaders.Accept.Clear();
            client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
            client.Timeout = TimeSpan.FromMinutes(2.1);

            var json = JsonConvert.SerializeObject(request);
            HttpContent content = new StringContent(json, System.Text.Encoding.UTF8, "application/json");

            HttpResponseMessage response = await client.PostAsync(client.BaseAddress, content);

            orderResponse = new CustomerOrdersResponse
            {
                SessionNumber = request.SessionNumber,
                SessionTotal = request.SessionTotal
            };

            if (response.IsSuccessStatusCode)
            {
                orderResponse.SuccessOrFailure = true;
            }
            else
            {
                var x = response.Content.ReadAsStringAsync().Result;
                if (x != null)
                {
                    orderResponse.Errors = JsonConvert.DeserializeObject<IEnumerable<Error>>(x).ToList();
                }

                orderResponse.SuccessOrFailure = false;
            }
        }
        customerorderResponses.Add(orderResponse);
    }
}
}
public class SecondService
{
private List<Error> orderRequest(OrderRequest NewRequest, ref Guid SessionId)
{
    PostOrders();
}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...