Цель состоит в том, чтобы улучшить код.
Клиентское приложение ASP.NET MVC отправляет HTTP-запрос на уровень сервиса.
Это API-интерфейс REST C #, в который мы передаем большие наборы данных.к другому REST API, который является уровнем базы данных.Репозиторий базы данных выполняет вставки в нормализованные таблицы.Например: новые заказы клиентов, платежи клиентов, платежи, заказы и т. Д.
Поскольку у нас большой набор данных, первым вариантом было разделить их на небольшие куски, разделив их на 1000 клиентов в одной партии.Который отправляется партиями.
- Все методы в коде реализуют async / await
- Установить
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();
}
}