Warum bin ich immer ProtocolViolationException wenn Sie versuchen, zu verwenden HttpWebRequest?
Habe ich keine Ahnung. Ich bin versucht, um XML-Daten aus einem REST-Dienst in eine app-ich Baue für Windows Phone. Ich bekomme immer eine exception in der folgenden Zeile:
HttpWebResponse response = request.EndGetResponse(ar) as HttpWebResponse;
Ich habe Folgendes setup (ignorieren Sie die schlechte url, es ist nur ein Beispiel .. )
HttpWebRequest request = WebRequest.Create("https://domain.chargify.com/customers.xml") as HttpWebRequest;
NetworkCredential credentials = new NetworkCredential("appkeyhere", "password");
request.Credentials = credentials;
request.Method = "GET";
request.ContentType = "text/xml";
request.BeginGetResponse(new AsyncCallback(SomeCallback), request);
...
private void SomeCallback(IAsyncResult ar) {
HttpWebRequest request = ar.AsyncState as HttpWebRequest;
HttpWebResponse response = request.EndGetResponse(ar) as HttpWebResponse;
StreamReader reader = new StreamReader(response.GetResponseStream());
XElement xmlResult = XElement.Parse(reader.ReadToEnd());
...
}
Ausnahme ist wie folgt:
System.Net.ProtocolViolationException was unhandled
Message=ProtocolViolationException
StackTrace:
at System.Net.Browser.ClientHttpWebRequest.PrepareAndSendRequest(String method, Uri requestUri, Stream requestBodyStream, WebHeaderCollection headerCollection, CookieContainer cookieContainer)
at System.Net.Browser.ClientHttpWebRequest.BeginGetResponseImplementation()
at System.Net.Browser.ClientHttpWebRequest.InternalBeginGetResponse(AsyncCallback callback, Object state)
at System.Net.Browser.AsyncHelper.BeginOnUI(BeginMethod beginMethod, AsyncCallback callback, Object state)
at System.Net.Browser.ClientHttpWebRequest.BeginGetResponse(AsyncCallback callback, Object state)
at ChargifyWPA.MainPage.button1_Click(Object sender, RoutedEventArgs e)
at System.Windows.Controls.Primitives.ButtonBase.OnClick()
at System.Windows.Controls.Button.OnClick()
at System.Windows.Controls.Primitives.ButtonBase.OnMouseLeftButtonUp(MouseButtonEventArgs e)
at System.Windows.Controls.Control.OnMouseLeftButtonUp(Control ctrl, EventArgs e)
at MS.Internal.JoltHelper.FireEvent(IntPtr unmanagedObj, IntPtr unmanagedObjArgs, Int32 argsTypeIndex, String eventName)
Jemand irgendwelche Ideen? Es ist https, nicht http .. ist, dass das Problem verursacht?
Danke.
- Poste bitte die vollständige Ausnahme, und zeigen uns, wo die exception Auftritt. Auch in SomeCallback, müssen Sie platzieren Sie Ihre IDisposable-Instanzen in der Verwendung von Blöcken. HttpWebResponse, StreamReader und sogar der Strom alle müssen in
using
Blöcke, oder Sie werden unnötig Ressourcen verbraucht. - Hinzugefügt Ausnahme zu meiner Frage .. und ich hab so modifiziert, dass "verwenden" - Blöcke, die in Ordnung ist. Problem immer noch Auftritt.
- Nicht sicher, ob dies ist der richtige Ort, es zu verlangen, aber könntest du bitte fügen Sie der Windows-Phone-7-tag zu diesem post?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Meine Wette dieses problem ist, weil Sie die "ContentType" - header, aber nicht die Bereitstellung von Inhalten in Ihrer Anfrage. Hinweis: die Protokoll-Ausnahme wird ausgelöst, während versucht wird, erstellen Sie die Anfrage.
Du meinst wohl um die 'Accept' - header auf "text/xml" anstelle des content-type-header.
Dies ist nicht Ihr problem, aber es könnte helfen, jemand anderes. Ich lief in dieses, weil, ich rief BeginGetRequestStream() auf eine GET-Anfrage. Natürlich, das ist nicht notwendig und ich sollte nur fordern BeginGetResponse(). Dumme Fehler, aber ich würde es herausgefunden haben viel schneller, wenn die Fehlermeldung hatte mehr hilfreich.
"Content-Type" - header mit "GET" die Ausnahme verursacht, wenn in der Anfrage vorhanden
In der Azure-Tabelle-REST-API ist es erforderlich zu Kodieren ContentType-in auth-header, obwohl die Verwendung leerer string für GET-header ist "ContentType"
Offenbar die häufigste Ursache für diesen Fehler auf dem desktop in diesen Tagen ist ein web-server erfordert SSL statt TLS-Authentifizierung. Finden Sie alle Kommentare auf dieser Artikel erläutert die Problembehandlung Optionen für verschiedene .NETTO-2 "HTTP-Fehler". Es erscheint Ihre MIT-lizenziert Chargify.NET Projekt auf CodePlex ist schon mit diesem work-around ("SecurityProtocolType.Ssl3").
Andere Optionen, um zu versuchen, aus ein weiterer Artikel circa 2008 zurückfallen auf HTTP/1.0 oder deaktivieren Keep-Alive.
Sicher sein, zu versuchen diese Antwort, entfernen der ContentType-Initialisierung.