通用异步HttpClient方法有时不起作用?

时间:2017-11-13 11:38:12

标签: c# httpclient

我正在使用 POST方法 SOAP服务中使用 Xamarin.Forms 创建应用程序;我有一堆正常工作的服务,实际上,其中一种方法用于在多种情况下发送信息,我的问题与此有关。

我有以下HttpClient方法,但有时候不起作用...不幸的是我无法访问后端代码而且他们不是为了帮助我而努力。

有关如何改进我的方法或获取真正错误的任何方法的任何想法?我被困在这里,因为我每次都发送相同的字段。

public async Task<string> InvokeAsync (string uri, string xmlSOAP) {
try {
    using (var handler = new HttpClientHandler () { UseCookies = false })

    using (var client = new HttpClient (new NativeMessageHandler ())) {
        client.DefaultRequestHeaders.Accept.Add (new MediaTypeWithQualityHeaderValue ("application/xml"));
        client.DefaultRequestHeaders.Add ("Cache-Control", "no-cache, no-store, must-revalidate");
        client.DefaultRequestHeaders.Add ("Pragma", "no-cache");
        client.Timeout = TimeSpan.FromSeconds (timeout);
        client.DefaultRequestHeaders.CacheControl.NoCache = true;

        var req = new HttpRequestMessage (HttpMethod.Post, uri) 
        {
            Content = new StringContent (xmlSOAP, Encoding.UTF8)
        };
        req.Content.Headers.ContentType = MediaTypeHeaderValue.Parse ("text/xml; charset=utf-8");

        if (uri.ToLowerInvariant ().Equals (jsessionUrlCheck)) {
            if (jsession != null && jsession.Count > 0) {
                foreach (var cookie in jsession) {
                    req.Headers.Add ("JSESSIONID", cookie);
                }
            }
            jsession = null;
        }

        HttpResponseMessage response = await client.SendAsync (req);
        string responseBodyAsText = response.IsSuccessStatusCode ? await response.Content.ReadAsStringAsync () : string.Empty;

        if (!string.IsNullOrEmpty (responseBodyAsText))
        {
            return responseBodyAsText;
        }

        return null;
    }
} catch (Exception e) {
    Debug.WriteLine ("========= InvokeAsync Exception =========");
    Debug.WriteLine ("Error: " + e.Message);
    return null;
}}

1 个答案:

答案 0 :(得分:1)

  

关于如何对真正的错误采取任何方法的任何想法?

听起来你真的不知道当它不起作用时到底发生了什么&#34;。处理实际错误的方法是在报告不起作用时找出此代码中究竟发生了什么。

你有日志吗?检查日志。如果有例外,那应该指向正确的方向。例外没有?也许开始记录收到的数据。没有日志?开始记录;没有更好的方法来处理您无法按需复制的间歇性故障。