Исключение со многими итерациями в веб-запросе - PullRequest
0 голосов
/ 22 сентября 2019

Приложение повторяет около 500 веб-запросов, случайным образом запрос возвращает 500-ошибку с сервера.Я полагаю, что это либо проблема с количеством сделанных запросов, либо в какой-то момент информация долго читается в таблице данных, что приводит к сбою соединения.Но это всего лишь догадки с моей стороны.Есть ли более умный способ перебрать все запросы или использовать другой подход?

У меня есть другие итерации, выполненные таким же образом для других запросов, ни одна из них не такая здоровенная, как эта, и они не выдают никаких ошибок с сервера.

foreach (DataRow row in dt.Rows)
{
                            string url = row["href"].ToString();
                            HttpWebRequest productsDetails = (HttpWebRequest)WebRequest.Create(url);
                            productsDetails.Credentials = nc;
                            productsDetails.Method = "GET";
                            productsDetails.Timeout = 5000;
                            productsDetails.ContentType = "application/x-www-form-urlencoded;charset=utf-8";

                            using (HttpWebResponse productsDetailsResponse = (HttpWebResponse)productsDetails.GetResponse())
                            {
                                var detailedRespons = productsDetailsResponse.GetResponseStream();

                                XDocument detailedResponsDoc = XDocument.Load(detailedRespons);

                                //foreach (XElement xe4 in detailedResponsDoc.Descendants("product_option_value"))
                                //{
                                //    DataRow row4 = dt4.NewRow();
                                //    row4["href"] = xe4.Attribute(xlink + "href").Value;
                                //    dt4.Rows.Add(row4);
                                //}

                                string p1 = detailedResponsDoc.Root.Element("combination").Element("id").Value;
                                string p2 = detailedResponsDoc.Root.Element("combination").Element("reference").Value;
                                string p3 = detailedResponsDoc.Root.Element("combination").Element("price").Value;
                                string p4;

                                foreach (XElement xe2 in detailedResponsDoc.Descendants("product_option_value"))
                                {
                                    p4 = (xe2.Value);

                                    DataRow row5 = test.NewRow();
                                    row5["id"] = p1;
                                    row5["referemce"] = p2;
                                    row5["price"] = p3;
                                    row5["POV"] = p4;
                                    test.Rows.Add(row5);

                                    DataRow row4 = dt4.NewRow();
                                    row4["href"] = xe2.Attribute(xlink + "href").Value;
                                    dt4.Rows.Add(row4);
                                }
                                productsDetailsResponse.Close();
                            }
                        }
                    }
                }
            }
            catch (WebException webex)
            {
                WebResponse errResp = webex.Response;
                using (Stream respStream = errResp.GetResponseStream())
                {
                    StreamReader reader = new StreamReader(respStream);
                    string text = reader.ReadToEnd();
                    MessageBox.Show("yttre:" + text);
                }
            }

сообщение об ошибке - это общее исключение 500 с сервера, указывающее мне связаться с хостом.Хост ничего не видит, и мало того, что я нашел в каком-то журнале ошибок на сервере, не содержит никакой информации.

1 Ответ

0 голосов
/ 22 сентября 2019

Убедитесь, что сервер не блокирует вас, на некоторых серверах установлены межсетевые экраны, которые блокируют повторяющиеся соединения с одного IP-адреса, так как считают, что это будет атака.

Это нормально и часто не может быть отключенохосты, так как это функция безопасности.

Добавьте задержку к запросам и посмотрите, правильно ли отвечает сервер, если это работает, то сервер может блокировать вас.

Попробуйте сделать подобноезапросы на локальном сервере, таком как XAMP, если возникают такие же ошибки, это может быть ошибка кода, например, информация, передаваемая на сервер (Заголовки, Post, Get и т. д.).

Попробуйте повторно использовать HttpWebRequest, чтобы избежать накладных расходовесли вы неоднократно создаете объект, попробуйте использовать асинхронные методы.

Существует множество переменных, объясняющих, почему могут быть ошибки, но наиболее вероятен шанс быть связанным с сервером или HttpWebRequest.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...