Почему httpwebrequest терпит неудачу в первый раз, а затем работает нормально?

StackOverflow https://stackoverflow.com/questions/4813839

Вопрос

Я стараюсь интегрировать FuseMail в ASP.NET 2.0. Я использую httpwebrequest для запроса страниц API. В последнее время я стал в курсе, что httpwebrequest терпит неудачу в первый раз, а затем продолжается, и последующие запросы добиваются успеха.

Скажите (я знаю, если я использую Goto, это плохой подход к программированию), если я использую этот код

retry:
        try
        {
            Uri uri = new Uri("http://www.fusemail.com/api/request.html");
            if (uri.Scheme == Uri.UriSchemeHttp)
            {

                HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(uri);
                request.PreAuthenticate = true;
                request.Method =
                WebRequestMethods.Http.Post;

                //request.ReadWriteTimeout = System.Threading.Timeout.Infinite;
                //request.Timeout = System.Threading.Timeout.Infinite;
                request.ContentLength = data.Length;
                request.ContentType =
                "application/x-www-form-urlencoded";
                //request.UserAgent = Request.UserAgent;
                request.UserAgent = "Mozilla/4.0";
                request.KeepAlive = false;

                request.ServicePoint.Expect100Continue = true;
                //request.Accept = "Accept: text/html,application/xhtml+xml,application/xml";


                StreamWriter writer = new StreamWriter(request.GetRequestStream());
                writer.Write(data);
                writer.Close();

                HttpWebResponse response = (HttpWebResponse)request.GetResponse();

                StreamReader reader = new StreamReader(response.GetResponseStream());
                string tmp = reader.ReadToEnd();
                response.Close();
                //Response.Write(tmp);

                if (!String.IsNullOrEmpty(tmp))
                {
                    return tmp;
                }
            }
            return String.Empty;
        }
        catch (WebException ex)
        {

            goto retry;
        }

Это работает после того, как пройдет один раз. Я пишу в текстовый файл в случае ошибки, и после того, как я не прошел запрос, он работает во второй раз. Я использую ASP.NET 2.0, и веб -сайт размещен на IIS 7 с Windows Server 2008 Standard. Также пингирует адрес API, он не работает в первый раз, а затем отвечает

C:\>ping 67.207.202.118

Pinging 67.207.202.118 with 32 bytes of data:
Reply from 192.168.0.253: **Destination host unreachable**.
Reply from 67.207.202.118: bytes=32 time=218ms TTL=49
Reply from 67.207.202.118: bytes=32 time=218ms TTL=49
Reply from 67.207.202.118: bytes=32 time=217ms TTL=49

Ping statistics for 67.207.202.118:
    Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
    Minimum = 217ms, Maximum = 218ms, Average = 217ms

В первый раз, когда он снят в сборе в httpwebrequest, с этой ошибкой не удается

System.net.webexception: невозможно подключиться к удаленному серверу ---> system.net.sockets.socketException: попытка подключения не удалась, потому что подключенная сторона не отвечала должным образом через некоторое время или установленное соединение не удалось, потому что подключенный хост не удалось ответить 67.207.202.118:80

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

Есть ли что -то не так в конфигурации IIS?

Это было полезно?

Решение

Это вообще не проблема программирования, я столкнулся с аналогичной проблемой позже, и это была проблема конфигурации сети из -за настройки сервера / брандмауэра ISA. Вы должны связаться с администратором сети, чтобы проверить эту проблему.

Я хотел бы, чтобы это помогло вам.

Ваш,

Мохамед Камал Эльбеа

Старший разработчик .NET

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top