【问题标题】:Error writing headers. Xamarin Android写入标题时出错。 Xamarin Android
【发布时间】:2016-05-03 08:20:21
【问题描述】:

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

消息:“写入标头错误”

响应:(空)

来源:“系统”

状态:System.Net.WebExceptionStatus.SendFailure 目标站点:{System.Net.WebResponse EndGetResponse(System.IAsyncResult)

{System.Net.WebException: Error writing headers ---> 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

[....] }

非常感谢

【问题讨论】:

标签: c# xamarin


【解决方案1】:

Mono 仅解码 TLS 1.0

切换到 Xamarin beta 通道并在您的项目设置 ios Build 中设置“使用 NSURLSession”而不是“Mono HttpClient”。

更多信息请参见this article

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • Windows 与 Xamarin 开发工作室。这是一个Android应用程序,服务器是linux。我刚刚读到,如果我安装证书看起来可以解决问题。我会尽力。你必须解决问题?,我已经看到足够多的人有这个特定的错误。非常感谢。
    • 我们停止支持操作系统。我们没有想出解决方案,但老实说并没有付出太多努力,因为 OS X 10.8 无论如何现在都比较老了。希望你能获得证书。
    【解决方案3】:

    由另一个有同样问题的人:

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

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

    [谢谢,你让我变得更强大]

    【讨论】:

      猜你喜欢
      • 2014-06-08
      • 2023-04-03
      • 2016-11-24
      • 1970-01-01
      • 2014-04-06
      • 1970-01-01
      • 2016-07-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多