Frage

Ich brähne es, Fusemail in ASP.NET 2.0 zu integrieren. Ich verwende httpwebRequest für die Anforderung der API -Seiten. Ich bin mir kürzlich aufmerksam, dass HTTPWebRequest beim ersten Mal fehlschlägt und dann weitergeht und nachfolgende Anforderungen erfolgreich sind.

Sagen Sie (ich weiß, wenn ich GOTO verwende, ist es ein schlechter Programmieransatz), wenn ich diesen Code verwende

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

Es funktioniert nach einem einmaligen Versagen. Ich schreibe bei einem Fehler in eine Textdatei und nachdem ich keine Anfrage beantragt habe, funktioniert sie beim zweiten Mal. Ich verwende ASP.NET 2.0 und die Website wird auf IIS 7 mit Windows Server 2008 -Standard gehostet. Auch das Ping der API -Adresse schlägt das erste Mal fehl und antwortet dann

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

Das erste Mal, dass es in httpwebRequest fehlschlägt, fällt es bei diesem Fehler fehl

System.net.WebException: Eine Verbindung zum Remote-Server kann nicht hergestellt werden ---> System.net.sockets.socketException: Ein Verbindungsversuch ist fehlgeschlagen hat 67.207.202.118:80 nicht antwortet

Gibt es beim ersten Mal ein Authentifizierungsproblem? Ich habe in einigen Foren gelesen, dass es zuerst eine nicht autorisierte 401 sendet und dann eine Verbindung herstellen kann. Ich kann dies nicht mit Fiddler überprüfen.

Stimmt etwas mit der IIS -Konfiguration nicht?

War es hilfreich?

Lösung

Dies ist überhaupt kein Programmierungsproblem, ich habe später ein ähnliches Problem und es war ein Netzwerkkonfigurationsproblem aufgrund von ISA -Server- / Firewall -Einstellungen. Sie müssen sich an Ihren Netzwerkadministrator wenden, um dieses Problem zu überprüfen.

Ich wünschte, das hat dir geholfen.

Deine,

Mohamed Kamal Elbeah

Senior .NET -Entwickler

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top