目标是改善代码。
ASP.NET MVC客户端应用程序向服务层发出HTTP请求。
这是C#REST API,我们将大型数据集传输到另一个REST API,即数据库层。数据库存储库不会插入到规范化的表中。 例如:新客户订单,客户付款,费用,订单等。
由于我们有一个很大的数据集,因此第一个选择是将它们分成小块,并在一个批次中分成1000个客户。 批量发送。
HttpClient
超时设置为TimeSpan.FromMinutes(2.1)
在插入所有批次之前,该过程失败了。错误是 DEADLOCK 。这是由于一个存储过程INSERT等待另一个存储过程被释放而发生的冲突。由于我的插件位于圆形锁定链中。 例如:如果我有10个批次。插入了9个批次,最后一个失败,出现SQL DEADLOCK错误。
请提供处理大型数据传输的建议。 int actualorderRequestsYetToProcess = 6我的批次被分割
如果任何请求未能完成,应用重试机制是否是一个好选择?
公共类FirstService { 私有异步任务> PutCustomerOrders(IEnumerable orderRequestList) { foreach(actualorderRequestsYetToProcess中的OrderRequest请求) {
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();
}
}