GetRequestStream() wirft time-out-Ausnahme, wenn die Buchungsdaten zu HTTPS-url
Ich bin dem Aufruf einer API-Hosting auf Apache-server, um post-Daten. Ich bin mit HttpWebRequest durchführen, POST in C#.
API hat, sowohl normal als HTTP und secure layer (HTTPS) PORT auf dem server. Wenn ich den Aufruf HTTP-URL funktioniert es einwandfrei. Jedoch, wenn ich den Aufruf von HTTPS es gibt mir die Timeout-Ausnahme (bei GetRequestStream () - Funktion). Irgendwelche Erkenntnisse? Ich bin mit VS 2010, .Net framework 3.5 und C#. Hier ist der code-block:
string json_value = jsonSerializer.Serialize(data);
HttpWebRequest request = (HttpWebRequest)System.Net.WebRequest.Create("https://server-url-xxxx.com");
request.Method = "POST";
request.ProtocolVersion = System.Net.HttpVersion.Version10;
request.ContentType = "application/x-www-form-urlencoded";
byte[] buffer = Encoding.ASCII.GetBytes(json_value);
request.ContentLength = buffer.Length;
System.IO.Stream reqStream = request.GetRequestStream();
reqStream.Write(buffer, 0, buffer.Length);
reqStream.Close();
BEARBEITEN:
Das Programm console vorgeschlagen von Peter funktioniert einwandfrei. Aber wenn ich das hinzufügen von Daten (im JSON format), das muss gepostet werden, um die API, es wirft operation timed out Ausnahme. Hier ist der code, den ich hinzufügen, Konsole-basierte Anwendung und es wirft Fehler.
byte[] buffer = Encoding.ASCII.GetBytes(json_value);
request.ContentLength = buffer.Length;
auch bekommen wireshark und schaut, was passiert ist über den Draht. überprüfen Sie, dass der Ziel-server akzeptiert crossdomain Anrufe.
Dank Peter. Ich fügte hinzu, ProtocolVersion und ContentType aber wie es aussieht, hat nicht viel geholfen.Ich werde überprüfen Sie mit wireshark, aber da Python-Anwendung kann leicht GET/POST an API-ich glaube-server ist die Annahme cross-domain Aufrufe.
InformationsquelleAutor Wiz | 2012-03-09
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich weiß nicht, ob dies wird Ihnen helfen, mit Ihrem spezifischen problem, aber Sie sollten erwägen, die Entsorgung einige dieser Objekte, wenn Sie fertig sind mit Ihnen. Ich war sowas vor kurzem und Verpackung Zeug in der using-Anweisungen scheint bereinigen eine Reihe von timeout Ausnahmen für mich.
außerdem überprüfen Sie diese Sachen
Haben Sie sich Gedanken über die Verwendung von WebClient statt?
EDIT:
stellen Sie eine Anfrage von der Konsole.
Eine weitere update - ich habe setup einfaches Python-Anwendung auf demselben API über HTTPS und seine Arbeit absolut in Ordnung. So sieht nur .Net ist problematisch. Nicht sicher, warum.
sind Sie mit cassini, iisexpress, oder iis?
können Sie versuchen, es in einer Konsole-Anwendung.
Ich bin mit dieser Anwendung in lokalen dev-env. auf Cassini. Ich bin traurig, und das klingt noob, aber wie wollen Sie versuchen, es in der console-Anwendung?
InformationsquelleAutor Peter
Ich lief in das gleiche Problem. Wie es scheint, ist es für mich gelöst. Ich ging durch alle meine code und achten Sie auf die invoke - webResponse.Close () - und/oder responseStream.Close () - für alle meine HttpWebResponse-Objekte. Die Dokumentation gibt an, dass Sie den stream schließen können oder die HttpWebResponse-Objekt. Aufruf ist nicht schädlich, also Tat ich es. Nicht schließen, die Reaktionen verursachen können, die die Anwendung zum ausführen von out-of verbindungen, die zur Wiederverwendung, und diese scheint auf die HttpWebRequest.GetRequestStream soweit ich das beobachten kann, in meinem code.
Sie gespeichert mein Zeit, Mann!
In der Tat ist dies die gleiche wie die akzeptierte Antwort von @Peter
InformationsquelleAutor DDRider62
Versuchen Sie dies:
- Und review-URI:
Reservierte Zeichen. Senden Sie reservierten Zeichen durch die URI bringen kann
Probleme
! * ' ( ) ; : @ & = + $ , /? # [ ]
URI-Länge: Sie sollten 2000 Zeichen nicht überschreiten
StreamWriter
rufenFlush()
&Close()
imDispose()
Methode, die aufgerufen werden, für Ihre Verwendung zu blockieren.Ich danke Euch so sehr, durch die Schließung von Antwort-und StreamReader-es funktionierte für mich.
InformationsquelleAutor J.C. Gras
Möchten Sie möglicherweise festlegen timeout-Eigenschaft, überprüfen Sie es hier http://www.codeproject.com/Tips/69637/Setting-timeout-property-for-System-Net-WebClient
InformationsquelleAutor seUser