Pregunta

No tengo ni idea. Estoy intentando conseguir XML de un servicio REST en una aplicación que estoy construyendo para Windows Phone. Siempre tengo una excepción en la siguiente línea:

HttpWebResponse response = request.EndGetResponse(ar) as HttpWebResponse;

Tengo la siguiente configuración (ignorar el mal url, es sólo un ejemplo ..)

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());
    ...
}

La excepción es la siguiente:

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)

Alguien tiene alguna idea? Es https, no http .. es que la causa del problema? Gracias.

¿Fue útil?

Solución

Mi apuesta este problema se debe a que se está configurando la cabecera 'ContentType', pero no para proporcionar el contenido de su petición. Tenga presente la excepción protocolo se tira al intentar crear la solicitud.

Es probable que significas para establecer el 'Aceptar' cabecera "text / xml" en lugar de la cabecera de tipo de contenido.

Otros consejos

Esto no es su problema, pero podría ayudar a alguien más. Me encontré con esto porque yo estaba llamando BeginGetRequestStream () en una petición GET. Por supuesto, eso no es necesario, y yo debería haber estado llamando BeginGetResponse (). error tonto, pero me hubiera dado cuenta mucho más rápido si el mensaje de error hubiera sido más útil.

"Content-Type" encabezado con "GET" provoca la excepción si está presente en la solicitud En la API REST Tabla Azure se requiere para codificar ContentType en la cabecera de autenticación sin embargo - utilizar para la cadena vacía "ContentType" de cabecera del GET

Al parecer, la causa más común de este error en el escritorio en estos días es un servidor web que requiere SSL en lugar de la autenticación TLS. Ver todos los comentarios en noreferrer este artículo que explica las opciones de solución de problemas para varios errores .NET 2 HTTP . Al parecer, su proyecto Chargify.NET con licencia del MIT en CodePlex ya usar este de obra alrededor ( "SecurityProtocolType.Ssl3").

Otras opciones para intentar de otro artículo circa 2008 están cayendo de nuevo a HTTP / 1.0 o desactivación de Keep-Alive.

No deje de probar esta respuesta , la eliminación de la inicialización ContentType .

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