通过RESTFUL API传输大数据集?

时间:2019-02-11 19:50:59

标签: c# .net asp.net-mvc api web-services

目标是改善代码。

ASP.NET MVC客户端应用程序向服务层发出HTTP请求。

这是C#REST API,我们将大型数据集传输到另一个REST API,即数据库层。数据库存储库不会插入到规范化的表中。 例如:新客户订单,客户付款,费用,订单等。

由于我们有一个很大的数据集,因此第一个选择是将它们分成小块,并在一个批次中分成1000个客户。 批量发送。

  1. 代码中的所有方法都实现了异步/等待
  2. 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();
}
}

0 个答案:

没有答案