【问题标题】:How to set time out for http client request operation in windows phone 8.1/Windows 8.1如何在 windows phone 8.1/Windows 8.1 中设置 http 客户端请求操作的超时时间
【发布时间】:2015-03-19 13:55:40
【问题描述】:

如何将 Timeout 属性设置为Windows.Web.Http.HttpClient 操作。我使用的代码示例如下。

public HttpClient httpClient;
public CancellationTokenSource cts;

public void SendRequest(addressUri,postrequestbody)
{
    HttpHelper.CreateHttpClient(ref httpClient);
    cts = new CancellationTokenSource();
    HttpRequestMessage msg = 
        new HttpRequestMessage(new HttpMethod("POST"), 
                               new Uri(addressUri));
    msg.Content = new HttpStringContent(postrequestbody);
    msg.Content.Headers.ContentType = 
        new HttpMediaTypeHeaderValue("application/json");
    HttpResponseMessage response = 
        await httpClient.SendRequestAsync(msg).AsTask();

    if (response.StatusCode == HttpStatusCode.Ok)
    {
    }
}

【问题讨论】:

    标签: c# windows-phone-8.1 windows-8.1 httpclient win-universal-app


    【解决方案1】:

    使用CancellationToken

    try 
    {
        CancellationTokenSource cts = new CancellationTokenSource(2000); // 2 seconds
        HttpClient client = new HttpClient();
        HttpResponseMessage response = await
            client.SendRequestAsync(request).AsTask(cts.Token);
    }
    catch (TaskCanceledException ex)
    {
        // Catch operation aborted ...
    }
    

    【讨论】:

    • 您是否尝试过超过 60 秒的超时? (您的示例使用 2 秒)我尝试像这样设置 10 分钟..... var response = await httpClient.PutAsync(operation, payload, new CancellationTokenSource(600000).Token);但这仍然在 60 秒后返回 404 NOT FOUND。
    • @iupchris10 我知道这已经晚了 2 年,但 60 秒不到 10 分钟。如果您有响应代码(即服务器已响应),那么您的请求还没有超时。我会 expect 这种行为,因为它是正确的行为。如果没有响应/响应时间过长,上面的代码将在 10 分钟后取消您的请求。在您的示例中并非如此。
    • 我知道这是 3 年后,但它是 600,000 而不是 60,000,即 10 分钟
    猜你喜欢
    • 1970-01-01
    • 2014-11-04
    • 2014-07-15
    • 1970-01-01
    • 2015-05-05
    • 2014-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多