根据发送的http请求数设置自动超时

时间:2017-04-19 12:48:54

标签: c# uwp httprequest httpclient proxy-server

我正在尝试使用C#作为便携式dll为UWP应用程序开发一个http代理服务器。但是,重试超时是60秒,与发送的请求数无关,比如发送4个请求,但是如果必须重试我必须等待60秒才能执行少量任务。有什么方法可以自动执行此重试超时,以便根据请求的数量使用最佳超时,也许可以使用全局声明的内容并在sendasync(用于发送请求)?

1 个答案:

答案 0 :(得分:0)

在UWP中,我们可以使用两个HttpClient来发送HTTP请求。它们是System.Net.Http.HttpClientWindows.Web.Http.HttpClient。我不确定你使用的是哪一个。

对于System.Net.Http.HttpClient,有两种方法可以设置超时。要为从该客户端发出的所有请求设置超时,我们可以使用HttpClient.Timeout属性:

var myClient = new System.Net.Http.HttpClient();
myClient.Timeout = TimeSpan.FromSeconds(30);

要在单个请求上设置超时,请使用取消令牌模式:

var cts = new CancellationTokenSource();
cts.CancelAfter(TimeSpan.FromSeconds(30));

var httpClient = new System.Net.Http.HttpClient();
var resourceUri = new Uri("http://www.contoso.com");

try
{
   HttpResponseMessage response = await httpClient.GetAsync(resourceUri, cts.Token);
}
catch (TaskCanceledException ex)
{
   // Handle request being canceled due to timeout.
}
catch (HttpRequestException ex)
{
   // Handle other possible exceptions.
}

对于Windows.Web.Http.HttpClient,Windows.Web.Http.HttpClient类型没有超时属性。因此,您必须使用上面显示的取消令牌模式。

var cts = new CancellationTokenSource();
cts.CancelAfter(TimeSpan.FromSeconds(30));

var httpClient = new Windows.Web.Http.HttpClient();
var resourceUri = new Uri("http://www.contoso.com");

try
{
    var response = await httpClient.GetAsync(resourceUri).AsTask(cts.Token);
}
catch (TaskCanceledException ex)
{
    // Handle request being canceled due to timeout.
}
catch (Exception ex)
{
    // Handle other possible exceptions.
}

有关详细信息,请参阅Demystifying HttpClient APIs in the Universal Windows Platform