webrequest 中多次迭代的异常

Exception with many iterations in webrequest

应用程序遍历大约 500 个 Web 请求,随机请求 returns 来自服务器的 500 错误。我相信他们要么是请求数量的问题,要么是在某些时候信息需要很长时间才能读入导致连接失败的数据表。但这些只是我的猜测。是否有更智能的方法来遍历所有请求或使用其他方法?

我以相同的方式对其他请求进行了其他迭代,none 其中与此请求一样大,并且它们不会从服务器抛出任何错误。

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 异常,请我联系房东。主机没有看到任何东西,我在服务器上的某种错误日志中发现的一点也不包含任何信息。

确保服务器没有阻止您,有些服务器的防火墙会阻止来自单个 IP 地址的重复连接,因为他们认为这会构成攻击。

这是一个正常现象,并且通常不能被主机禁用,因为它是一项安全功能。

为请求添加延迟,看看服务器是否正确响应,如果有效,则服务器可能阻止了您。

尝试在像 XAMP 这样的本地服务器上发出类似的请求,如果出现相同的错误,这可能是代码错误,比如传递给服务器的信息 (Headers, Post,获取等)。

如果您重复创建 object,请尝试重新使用 HttpWebRequest 以避免开销,请尝试使用异步方法。

关于为什么会出现错误,有很多变数,但最有可能是 server-related 或 HttpWebRequest。