【问题标题】:PostAsync method of HttpClient throws an Aggregate exception after 2-3 timeout requestsHttpClient 的 PostAsync 方法在 2-3 次超时请求后抛出 Aggregate 异常
【发布时间】:2013-01-04 06:00:50
【问题描述】:

我正在使用 HttpClient 进行网络请求,它涉及“超时”功能,除了超时功能外一切正常

当请求被点击 2-3 次时会引发“聚合异常”(例如单击登录按钮并且请求超时)。

我已经尝试“捕捉”异常,但它不起作用。

使用的代码:

        try
        {
            HttpClient httpClient = new HttpClient();

           //explicit timeout for testing

           TimeSpan requestTimeout = new TimeSpan(1000);
            httpClient.Timeout = requestTimeout;
            HttpContent httpContent = new StringContent(postJSON);
            httpContent.Headers.ContentType = new MediaTypeHeaderValue("application/json");
            HttpResponseMessage response = null;

            response = await httpClient.PostAsync(url, httpContent);
            if (response != null)
            {
                response.EnsureSuccessStatusCode();
                netResults = await response.Content.ReadAsStringAsync();
                Logger.Log("NetworkRequest:ResponseStream:Json result:" + netResults);
            }

            if (this.convertedType != null)
            {
                MemoryStream assetReader = GetMemoryStreamFromString(netResults);
                assetReader.Position = 0;
                object value = fromJSON(assetReader, this.convertedType);
                networkReqSuccessWithObjectCallback(this, value);
            }
            else
            {
                //Return netResult as string.
                networkReqSuccessWithStringCallback(this, netResults);
            }
        }

        catch (TaskCanceledException)
        {
            ErrorException ee = null;
            ee = new ErrorException("RequestTimeOut");
            NotifyNetworkDelegates(ee);
        }

        catch (WebException we)
        {
            // failure
            ErrorException ee = null;
            ee = ErrorException.fromJSON(we.Message);
            NotifyNetworkDelegates(ee);
        }

        catch (Exception e)
        {
             Do something.
        }

关于这里出了什么问题的任何想法。(使用 C#+XAML+Win8)

【问题讨论】:

  • 你试过catch(AggregateException e)吗?在e.InnerExceptions 中,您应该找到您的WebException 或导致您中止的原因。
  • 我尝试捕获 AggregateException 但这并不能阻止应用程序崩溃。

标签: c# windows c#-4.0 windows-8


【解决方案1】:

HttpClient 在后台使用 HttpWebRequest。很可能您正在达到 HttpWebRequest 的 ServicePoint 的两个并发连接限制。

【讨论】:

  • 好吧,但是一旦taskcancelledexception(发生在超时)被抛出并不意味着请求完成,之后只有我再拍一个。
【解决方案2】:

在 package.appxmanifest > Capabilities 中进行一些更改后,我遇到了同样的问题

-> 启用 Internet(客户端和服务器)选项

此应用程序正常运行后。

【讨论】:

  • Internet (Client & Server) 选项是否默认启用?
  • 是的,Internet (Client & Server) 默认启用此选项。
  • 因此,这不是答案?
  • 但有时用户在不知道时间用于他们的情况下更改了功能
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多