我正在尝试使用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
[...] }
非常感谢
答案 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 odooProcess 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();
}
[谢谢,你让我更加坚强]