Pergunta

Não faço ideia. Estou tentando obter XML de um serviço de descanso em um aplicativo que estou construindo para o Windows Phone. Eu sempre recebo uma exceção na seguinte linha:

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

Eu tenho a seguinte configuração (ignore o URL ruim, é apenas um exemplo ..)

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

A exceção é a seguinte:

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)

Alguém tem alguma ideia? É https, não http .. isso está causando o problema? Obrigado.

Foi útil?

Solução

Minha aposta esse problema é porque você está configurando o cabeçalho 'ContentType', mas não fornece conteúdo em sua solicitação. Nota A exceção do protocolo é lançada ao tentar criar a solicitação.

Você provavelmente pretende definir o cabeçalho 'aceitar' como "texto/xml" em vez do cabeçalho do tipo de conteúdo.

Outras dicas

Este não é o seu problema, mas pode ajudar outra pessoa. Eu encontrei isso porque estava chamando de borracheTrequestStream () em uma solicitação GET. Claro, isso não é necessário e eu deveria estar chamando de resposta de borracha (). Erro bobo, mas eu teria descoberto isso muito mais rápido se a mensagem de erro tivesse sido mais útil.

O cabeçalho do tipo "Content -Type" com "get" causa a exceção se estiver presente na solicitação na API do Azure Table Rest, é necessário codificar o contenttype no cabeçalho de autenticação - use string vazia para o cabeçalho do get's "contenttype"

Aparentemente, a causa mais comum desse erro na área de trabalho atualmente é um servidor da Web que requer SSL em vez de autenticação TLS. Veja todos os comentários sobre Este artigo explica opções de solução de problemas para vários erros .NET 2 HTTP. Parece que seu projeto Chargify.net licenciado pelo MIT no CodePlex já está usando este trabalho de trabalho ("SecurityProtocoltype.SSL3").

Outras opções para tentar de Outro artigo por volta de 2008 estão voltando para http/1.0 ou desativando a manutenção.

Certifique -se de tentar esta resposta, removendo a inicialização do contentType.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top