无法使用HTTPClient在Xamarin Android中调用旧的Web服务

时间:2019-01-15 19:14:01

标签: xamarin.forms xamarin.android

关于使用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;
    }

0 个答案:

没有答案