Frage

ich ursprünglich WebRequest verwendet und WebResponse gesendet Nachrichten Http Post. Immer bekam ich eine Antwort von „OK“. Die Botschaft, die ich schreiben ist eine XML mit einem Zertifikat in der XML unterzeichnet.

Die Zusammensetzung ist dies: C # Dienst, der auf eine https Website sendet. HTTPS Webseite auf einem anderen Ort, den ich sagen kann nicht. HTTPS Local Website lokal, die gerade die Nachrichten empfangen, ich lokal posten und die Ergebnisse in eine Datei zu schreiben. Nur um zu simulieren, was die andere Website erhält.

Local Website ist mit einem selbstsignierten Zertifikat unterzeichnet verfallen in 2048.

Dieser Code funktioniert gut, bis dieser Woche an. Ich habe immer geschrieben und bekam eine OK. In beiden Websites. Aber in dieser Woche den Test und das eigentliche Projektumsetzung beide gehen Kaput. Auf beiden Websites.
Auf der lokale Website es sagen will nicht in der Lage zu SSL zu verbinden. Dieses Problem wird durch das selbst signiertes Zertifikat verursacht, dass aus irgendeinem Grunde über meine seine geben Hölle zu verstehen. Dank der Fragen hier ich validiert nur das Zertifikat immer wahr zu sein, und jetzt ist es nicht mehr nervt.

Um dies zu beheben dies nur schreiben:

ServicePointManager.CertificatePolicy = new AcceptAllCertificatePolicy();

In dem Start Ihrer Anwendung. So dass es nur einmal ausgeführt wird.

Das verbleibende Problem ist der "Der Remoteserver hat einen Fehler zurückgegeben:. (503) Server nicht verfügbar". Ich geben Sie die URL in meinem Browser und es funktioniert gut für mich. Im Code wird diese Website nichts zu empfangen und wenn es um die Web-Antwort geht gibt es mir die obigen Fehler

Ich habe eine Test-Anwendung, die nur „Testing 1 2 3“ sendet aber ich halte den Fehler. Ich habe es auch zu einer https Website harvard und es gab keine Fehler.

private void btnSend_Click(object sender, EventArgs e)
    {
        try
        {
            WebRequest req = WebRequest.Create(cboUrl.Text);
            req.PreAuthenticate = true;
            req.UseDefaultCredentials = true;
            req.Method = "POST";
            req.ContentType = "text/xml";
            String msg = txtMsg.Text;

            using (Stream s = req.GetRequestStream())
            {
                try
                {
                    s.Write(
                        System.Text.ASCIIEncoding.ASCII.GetBytes(msg), 0, msg.Length);
                }
                finally
                {
                    s.Close();
                }
            }

            WebResponse resp = req.GetResponse();
            StreamReader str = new StreamReader(resp.GetResponseStream());

            txtRes.Text = str.ReadToEnd();
        }
        catch (WebException ex)
        {
            txtRes.Text = ex.Message;
        }
        catch (Exception ex)
        {
            txtRes.Text = ex.Message;
        }

    }

Dies ist ein weiteres Beispiel, das ich aus gebaut, was ich im Internet gefunden:

private void button1_Click(object sender, EventArgs e)
    {
        try
        {

            HttpWebRequest myReq = (HttpWebRequest)WebRequest.Create(cboUrl.Text);
            myReq.Headers.Clear();
            myReq.Method = "POST";
            myReq.KeepAlive = false;
            myReq.ProtocolVersion = HttpVersion.Version11;
            myReq.ContentType = "text/xml";
            myReq.Proxy = null;
            myReq.Credentials = null;
            myReq.ContentLength = txtMsg.Text.Length;
            using (StreamWriter sendingData = new StreamWriter(myReq.GetRequestStream()))
            {
                sendingData.Write(txtMsg.Text);
                sendingData.Flush();
                sendingData.Close();
            }

            HttpWebResponse myResponse = (HttpWebResponse) myReq.GetResponse();
            StreamReader responseStream = new StreamReader(myResponse.GetResponseStream());
            txtRes.Text = responseStream.ReadToEnd();

            responseStream.Close();
            myResponse.Close();

        }
        catch(WebException ex )
        {
            txtRes.Text = ex.Message;
        }
        catch (Exception ex)
        {
            txtRes.Text = ex.Message;
        }


    }

Aktualisieren

war Fehler, dass die, die ich mit httpwebrequest rief, einige httpheaders erforderlich, dass ich nicht bereitstellt. Bevor das einzige, was passiert war, dass ich eine Antwort „OK“ bekam. Sie setzten ihren Code und ich feste Mine und nun seine Arbeiten.

Wenn es an jemand anderen Scheck wie das geschieht unterhalb den Proxy-Einstellungen und auch überprüfen, ob die andere Seite eine Ausnahme geben oder gar nichts zurück.

War es hilfreich?

Lösung

Wenn Sie nicht recieving einen Fehler 503, wenn in Ihrem Browser die URL der Navigation, aber Sie empfängt es, wenn die Ressource anfordert, wenn HttpWebRequest verwenden, das erste, was ich würde empfehlen, dass Sie einen Wert für die geben Sie Useragent , wenn der diesen Antrag gestellt.

Sie können auch Fiddler2 oder ein anderes Werkzeug zu bekommen eine bessere Vorstellung davon verwenden, was ist geschieht während der Laufzeit des Antrags. Es ist schwer, Anleitung zu geben, ohne mehr über die Details des Dienstes zu wissen, Sie Nachrichten zu verfassen,.

Andere Tipps

Das Problem scheint zu sein, dass diese Website geändert. Vor wenn ich eine Nachricht mit jedem Junk gesendet würde es die üblichen OK zurück. Sie änderten die Website und es gibt einige HTTP-Header erforderlich. Gestern hatte ich die HTTP-Header für den ganzen Tag und in der Nacht war, als es funktionierte. In meinem Fall war es, dass sie die HTTP-Header und nicht bekommen sie erwartet und vielleicht ist etwas explodiert.

ich es heute getestet, um die Header zu geben und nicht die HTTP-Header und im letzteren Fall gibt es die 503.

tat

Wenn ich weitere Informationen finden werde ich versuchen, es zu schreiben hier. Ich hoffe, dass dies einige Zeit spart und einige Haare zu anderen Menschen.)

Ich hatte ein ähnliches Problem. Dank des Fiddler Spitze, fand ich heraus, dass es durch die Proxy-Einstellungen in meiner neuen Entwicklungsumgebung verursacht wurde. Sehr nervig. Der .NET Web Service übernimmt die Proxy-Einstellungen im Internet Explorer.

Weitere Informationen finden Sie unter: http://support.microsoft.com/kb/307220 und http://msdn.microsoft.com/en-us/ Bibliothek / kd3cf2ex.aspx .

Ich hatte ähnliches Problem mit 503 Fehlern, aber Grund dafür war Proxy. Wenn Sie Proxy haben, nur diese verwenden:

request.Proxy = null;

request.Credentials = System.Net.CredentialCache.DefaultCredentials;

Wenn Sie Zurücksetzen IIS sicherstellen, dass Sie Ihr Passwort kürzlich nicht geändert haben. Albern, aber es passiert.

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