2017-04-19 9 views
-1

C#を移植可能なdllとして使用するUWPアプリケーション用のhttpプロキシサーバーを開発しようとしています。再試行タイムアウトは送信された要求の数に関係なく60秒です4回のリクエストが送信されますが、再試行が必要な場合は、少数のタスクのために60秒間待たなければなりません。リクエストの数に基づいて最適なタイムアウトが使用されるようなリトライタイムアウトを自動化できる方法はありますかsendasync(リクエストの送信に使用)内でグローバルに宣言されたものを使用して呼び出すことができますか?送信されたHTTP要求の数に基づいて自動タイムアウトを設定する

+0

こんにちはジェイ!私はあなたに私の問題の更新を与えてくれないことを本当に残念です。私はsystem.net.http.httpclientを使用しています。あなたが伝えようとしていることを理解しました。要求がsendasyncメソッドで60秒に再試行される前にタイムアウトを設定しました。おそらく20秒後に引退する。ここでは、リクエスト数に基づいて再試行のタイムアウトを自動化する必要がありました。 –

+0

タイムアウトは、要求を送信する前にのみ設定できます。リクエストが送信された場合、タイムアウトを変更する方法はありません。 –

+0

ああ申し訳ありませんジェイ私はあなたが私のことを誤解していると思います。私は例を使って実証するのが一番良いと思います。今はN個のリクエストを送信しているとします。N> 30ならば60秒、N <30ならタイムアウト30秒、より具体的な何か。私はこの論理のためのコードやもっと具体的なものを実装する必要があります。詳細を提供できるようにあなたのメールIDを教えてください。 –

答えて

0

UWPには、HTTPリクエストを送信するために使用できるものが2つあります(HttpClient)。それらはSystem.Net.Http.HttpClientWindows.Web.Http.HttpClientです。私はどちらがあなたが使用しているかわからない。

System.Net.Http.HttpClientの場合、タイムアウトを設定するには2通りの方法があります。 、単一の要求にタイムアウトを設定キャンセルトークンパターンを使用するには

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

:そのクライアントからのすべての要求のタイムアウトを設定するには、我々はHttpClient.Timeoutプロパティを使用することができますWindows.Web.Http.HttpClientについて

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型にタイムアウトプロパティはありません。その結果、上記の取り消しトークンパターンを使用する必要があります。

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を参照してください。

関連する問題