Pregunta

Estoy tratando de integrar Fusemail en ASP.NET 2.0. Estoy usando httpwebrequest para solicitar las páginas API. Recientemente me ha dado cuenta de que HttpWebRequest falla la primera vez y luego continúa y las solicitudes posteriores tienen éxito.

Di (sé que si uso goto es un mal enfoque de programación) si uso este código

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;
        }

Funciona después de fallar una vez. Estoy escribiendo en un archivo de texto en caso de un error y después de fallarse la solicitud, funciona la segunda vez. Estoy usando ASP.NET 2.0 y el sitio web está alojado en IIS 7 con Windows Server 2008 Standard. También haciendo sonar la dirección de la API, falla la primera vez y luego responde

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

La primera vez que falla en httpwebrequest falla con este error

System.net.webexception: no se puede conectar al servidor remoto ---> system.net.sockets.socketException: un intento de conexión falló porque la parte conectada no respondió correctamente después de un período de tiempo o una conexión establecida falló porque el host conectado no ha podido responder 67.207.202.118:80

¿Hay un problema de autenticación la primera vez? Leí en algunos foros que primero envía un 401 no autorizado y luego puede conectarse. No puedo verificar esto usando Fiddler.

¿Hay algo de malo en la configuración de IIS?

¿Fue útil?

Solución

Este no es un problema de programación en absoluto, me he enfrentado a un problema similar más adelante y fue un problema de configuración de red debido a la configuración de servidor / firewall ISA. Debe comunicarse con su administrador de red para verificar este problema.

Desearía que esto te ayudara.

Tuya,

Mohamed Kamal Elbeah

Desarrollador de .NET senior

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top