写标题时出错。 Xamarin Android

时间:2016-05-03 08:20:21

标签: c# xamarin

我正在尝试使用HttpWebRequest从https服务器读取一些数据,这段代码适用于HTTP,但使用HTTPS抛出异常:(Android Proyect)

  

消息:“编写标题时出错”

     

回复:( null)

     

来源:“系统”

     

状态: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

[...] }

非常感谢

3 个答案:

答案 0 :(得分:1)

Mono仅解码TLS 1.0

切换到Xamarin测试版频道,在项目设置中,ios构建,设置&#34;使用NSURLSession&#34;而不是&#34; Mono HttpClient&#34;。

有关详细信息,请参阅this article

答案 1 :(得分:0)

我在OS X 10.8上遇到此错误。在这种情况下,操作系统提供的证书已经过时。您在哪个平台上部署?

答案 2 :(得分:0)

另一个有同样问题的人:

也许我的解决方案不是最好的,但它适用于https。

信息 - &gt;从xamarin(c#)

连接服务xml-rpc odoo
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();
    }

[谢谢,你让我更加坚强]