关于使用HTTPClient与旧的Web服务进行通信,我读了很多东西。代码是带有.NetStandard(System.Net.Http)的xamarin形式,我只有以下简单代码:
German
SELECT FORMAT(19998.018,'# ##0.000', 'de-de')
Swedish
SELECT FORMAT(19998.018,'# ##0.000', 'sv-se')
在UWP上,代码运行良好,我在response.Content.ReadAsStringAsync();之后收到答复。 但是在Android上,我可以跟踪代码直到await client.PostAsync(...),然后调试器在函数末尾跳转“ return false”。也不例外,没有错误,我在Android设备日志中唯一的东西是:NetworkSecurityConfig:没有使用平台默认值指定网络安全配置。
有什么主意吗?该URL对开发计算机而言是本地的,可以从android模拟器设备浏览器访问。
EDIT1: 当我删除PostAsync方法前面的await并添加.Result时,可以使代码工作。但是我不明白为什么。此代码对UWP效果很好!有我的修改(soapResponse获得了正确的数据):
public async Task<bool> TestKelvinConnectivity()
{
bool retour = false;
using (var client = new HttpClient())
{
client.BaseAddress = _baseEnkiWeb;
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/soap+xml"));
string Enveloppe = "<soap:Envelope xmlns:soap='http://www.w3.org/2003/05/soap-envelope' xmlns:dun='http://Dunin.com'><soap:Header><dun:User></dun:User><dun:ClefSession>Login</dun:ClefSession><dun:Licence1>EnkiEve</dun:Licence1><dun:Licence2></dun:Licence2></soap:Header><soap:Body><dun:loadMaintenance></dun:loadMaintenance></soap:Body></soap:Envelope>";
var content = new StringContent(Enveloppe, Encoding.UTF8, "application/soap+xml");
try
{
var response = await client.PostAsync(_baseEnkiWeb.ToString(), content);
var soapResponse = await response.Content.ReadAsStringAsync();
if (soapResponse.Contains("ErreurAuthentification") == true)
{
throw new Exception("ErreurLoadMaintenance");
}
XDocument soap = XDocument.Parse(soapResponse);
XNamespace ns = "http://Dunin.com";
}
catch (Exception ex)
{
throw ex;
}
}
return false;
}