2016-05-03 3 views
0

Я пытаюсь прочитать некоторые данные с HTTPS сервера с помощью HttpWebRequest и этот код работает нормально для HTTP, но брошено исключение с HTTPS: (Android Proyect)Ошибка записи заголовков. Xamarin Android

сообщение: «Ошибка записи заголовков»

Ответ: (нуль)

Источник: "система"

Статус: System.Net.WebExceptionStatus.SendFailure TargetSite: {System.Net.WebResponse EndGetResponse (System.IAsyncResult)

{System.Net.WebException: заголовки ошибок ---> System.IO.IOException: Ошибка аутентификации или дешифрования. ---> Mono.Security.Protocol.Tls.TlsException: Ошибка аутентификации или дешифрования. в Mono.Security.Protocol.Tls.RecordProtocol.EndReceiveRecord (IAsyncResult asyncResult)}

InnerException: {System.IO.IOException: Ошибка аутентификации или дешифрования. ---> Mono.Security.Protocol.Tls.TlsException: Ошибка аутентификации или дешифрования. в Mono.Security.Protocol.Tls.RecordProtocol.EndReceiveRecord (IAsyncResult AsyncResult)

Найдено некоторую информацию, но предложенные решения не работают.

Может кто-нибудь мне помочь.

Это мой код:

string serviceUrl = "https://erp.xxxxxxx.com/xmlrpc/"; 
XmlRpc.serviceUrl = bbdd.connection.url + "common"; 

var parameterArray = new object[3]; 
parameterArray.SetValue(bbdd.connection.bbdd, 0); 
parameterArray.SetValue(user.Text, 1); 
parameterArray.SetValue(pass.Text, 2); 

XmlRpc.call("login", parameterArray); 

----------------------------------------------------------- 

public static object call(string methodName, params object[] args)  { 

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(serviceUrl); 

request.UserAgent = "XML-RPC Client (Xamarin)"; 
request.Method = "POST"; 
request.ContentType = "text/xml"; 
request.Timeout = 6000; 

Stream stream = (Stream)request.GetRequestStream(); 
using (XmlTextWriter writer = new XmlTextWriter(stream, Encoding.ASCII))  { 
writer.WriteStartDocument(); 
      writer.WriteStartElement("methodCall"); 
      writer.WriteElementString("methodName", methodName); 

      writer.WriteStartElement("params"); 
      if (args != null) 
       foreach (object arg in args) 
       { 
        writer.WriteStartElement("param"); 
        SerializeParam(writer, arg); 
        writer.WriteEndElement(); 
       } 

      writer.WriteEndElement(); 
      writer.WriteEndElement(); 
     } 


XmlTextReader xmlResponse = new XmlTextReader(request.GetResponse().GetResponseStream()); <- here throw exception 

[....] }

Большое спасибо

+0

Возможный дубликат [X.iOS Cycle7 кажется для разрыва SSL] (http://stackoverflow.com/questions/36931588/x-ios-cycle7-seems-to-break-ssl) – SushiHangover

+0

У меня есть эта проблема в одном Android-приложении ... – raBinn

ответ

0

другим человеком, имеющим ту же проблему:

Может быть, мое решение не самое лучшее, но он работает с HTTPS.

INFO -> Связь с сервис ХМЬКРС odoo из Xamarin (с #)

Process proceso = null; 
try { 
    var info_proceso = new ProcessStartInfo { 
    FileName = "curl",  
    Arguments = string.Format("-k {0} --data \"{1}\"", 
      bbdd.connection.url + "common", 
      "<methodCall><methodName>login</methodName>" + 
      "<param><value>your_bbdd</value></param>" + 
      "<param><value>your_user_or_mail</value></param>" + 
      "<param><value>your_pass</value></param></methodCall>"), 
    RedirectStandardOutput = true, 
    UseShellExecute = false, 
    CreateNoWindow = false, 
    }; 

    proceso = Process.Start(info_proceso); 
    var res = proceso.StandardOutput.ReadToEnd(); 
    } 
    finally { 
     if (proceso != null && proceso.HasExited == false) 
     proceso.Kill(); 
    } 

[спасибо, вы мне сделали гораздо сильнее]

0

я испытал эту ошибку на OS X 10.8. Сертификаты, предоставленные ОС, в этом случае были устаревшими. На какой платформе вы развертываете?

+0

Windows с студией разработки Xamarin , Это приложение для Android, а сервер - Linux. Я просто прочитал, что если я установлю сертификат, похоже, он может решить проблему. Я попробую. Вы должны устранить проблему? Я видел достаточно людей с этой конкретной ошибкой. спасибо. – raBinn

+0

Мы остановились для поддержки ОС. Не было решения, которое мы придумали, но, честно говоря, в нем не было слишком много усилий, так как OS X 10.8 в любом случае относительно устарела. Надеюсь, вам повезло с сертификатами. – mithras

1

Mono декодирует TLS только 1,0

Переключить на бета-канал Xamarin и в настройках проекта, ИОС сборки, установите «Использовать NSURLSession» вместо «Mono HttpClient».

Для получения дополнительной информации см. this article.

+0

Это решение действительно для Android-приложения, спасибо! – raBinn

Смежные вопросы