Как избежать исключения тайм-аута http-ответа в C#
привет,
Я вызываю эту функцию через url-адрес из своего настольного приложения
[HttpPost] [AcceptVerbs("POST")] async public Task<HttpResponseMessage> SyncItem(long TenantId) { try { CashVitae_TM.Tenant oTenant = new CashVitae_TM.Tenant(); oTenant = oTenant.getTenantByTenantId(TenantId); string dbUN = oTenant.DBUN; string dbPass = oTenant.DBPass; long SavedItemId = 0; Item oitem = new Item(); byte[] data = await Request.Content.ReadAsByteArrayAsync(); string JsonInventory = System.Text.Encoding.Default.GetString(data); List<InventoryItem> lstInventoryItem = JsonConvert.DeserializeObject<List<InventoryItem>>(JsonInventory); foreach (var Inventory in lstInventoryItem) { Item oitem1 = new Item(); string ItemCode = Inventory.ItemCode; Item item = oitem.getItembyCode(TenantId, dbUN, dbPass, ItemCode); if (item != null) { oitem1.Id = item.Id; oitem1.Code = item.Code; oitem1.CreatedDtTm = item.CreatedDtTm; } else { oitem1.Id = 0; oitem1.Code = Inventory.ItemCode; oitem1.CreatedDtTm = DateTime.Now; } oitem1.TenantId = TenantId; oitem1.Name = Inventory.Name; oitem1.Category = Convert.ToString(Inventory.Category); oitem1.CostMethod = Convert.ToString(Inventory.MethodName); oitem1.Location = Convert.ToString(Inventory.Location); oitem1.UnitPrice = Inventory.UnitPrice; oitem1.Quantity = Inventory.QtyAvailable; oitem1.QtyOnHand = Inventory.QtyOnHand; oitem1.IsActive = Inventory.IsActive; oitem1.ModifiedDtTm = DateTime.Now; SavedItemId = oitem1.Save(TenantId, dbUN, dbPass); } return new HttpResponseMessage(HttpStatusCode.OK); } catch (Exception ex) { return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, ex.Message); } }
а это мой код настольного приложения
try { string str = Inventory(); using (WebClient httpclient = new WebClient()) { //string str = "abc"; string url = "http://localhost:51411/api/MobileAPI/SyncItem?TenantId=" + CommonClass.tenantId; ASCIIEncoding encoding = new ASCIIEncoding(); byte[] data = encoding.GetBytes(str); HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); request.Method = "Post"; request.ContentLength = data.Length; request.ContentType = "application/json"; using (Stream stream = request.GetRequestStream()) { stream.Write(data, 0, data.Length); } request.Timeout = Timeout.Infinite; request.KeepAlive = true; HttpWebResponse response = (HttpWebResponse)request.GetResponse(); response.StatusCode.ToString(); } } catch(Exception ex) { throw ex; }
но я получаю исключение тайм-аута операции на моем рабочем столе
Что я уже пробовал:
Я вызываю метод в своем API для сохранения данных в веб-БД
Я пытался
request.Timeout = Timeout.Infinite; request.KeepAlive = true;
затем также ту же ошибку я получаю, как я могу справиться с исключением таймаута.
одно решение я знаю, что разделение данных, но если кто-то может дать другое решение без разделения данных, только один раз я хочу отправить все данные.
Richard Deeming
Начните с тренировки который время операции истекло. Вполне возможно, что ошибка тайм-аута находится на сервере, а не на клиенте.
Member 10192073
Я проверю, но я разделился и теперь отправляю данные со 100 за вызов....
Одно я хочу тебе сказать
Даже в моем настольном приложении я получал исключение таймаута, но мой веб-API тоже работал в это время.
Это означает, что когда я получил исключение тайм-аута в моем настольном приложении, в то время как в моих записях веб-БД было вставлено 156 строк, но всего через несколько секунд я снова запустил select query в веб-БД, я снова получил 258 записей, через несколько секунд я запустил select query и получил 468 строк, это означает, что даже исключение тайм-аута поступало в рабочий стол, но операция шла в моем веб-коде.