2017-04-03 8 views
1

私のコードをタイムアウト例外があります。は時々私は

var uri = new Uri($"{domain}/3/device/{deviceToken}"); 

var client = new Http2Client(uri); // using HttpTwo 

var headers = new NameValueCollection 
{ 
    {"apns-id", Guid.NewGuid().ToString()}, 
    {"apns-expiration", "0"}, 
    {"apns-priority", "10"}, 
    {"apns-topic", topic}, 
    {"authorization", $"bearer {jwtToken}"} 
}; 

var body = Encoding.ASCII.GetBytes(JsonConvert.SerializeObject(payload)); 

var response = await client.Send(uri,HttpMethod.Post, headers, body); 

このコードは、適切な応答の時間のほとんどを与えるが、たまに私が操作が例外をタイムアウトした取得します。

---> System.TimeoutException:操作がタイムアウトしました。 HttpTwo.Http2Client.d__19.MoveNextで () ---例外がスローされた以前の場所からのスタックトレースの終わり--- System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccessで (タスクタスク) System.Runtimeで。例外がスローされた以前の場所からCompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification HttpTwo.Http2Client.d__17.MoveNextで(タスクタスク) () ---スタックトレースの終わり--- System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccessで(タスクのタスク)HttpTwo.Http2Client.d__15.MoveNextでSystem.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(タスクタスク) で()

+0

これもあります。解決策は見つかりましたか? –

+0

私はhav同じ問題、ソリューションですか? –

答えて

0

あなたの接続にHttp2Client.ConnectionSettings.ConnectionTimeoutを設定すると、より予測可能になります))) そして、apns接続の再接続ロジックを実装する必要があります。このような 何か:ドキュメントから

int retry = 0; 
while (retry < 1) 
{ 
    try 
    { 
     var response = await client.Send(uri,HttpMethod.Post, headers, body); 
     break; 
    } 
    catch (TimeoutException) 
    { 
     retry++; 
    } 
} 

複数の通知間のオープンのAPNを使用して接続してください。接続を繰り返し開いたり閉じたりしないでください。 APNは、迅速な接続と切断をDoS攻撃として扱います。長時間アイドル状態になることがわかっている場合を除き、接続を開いたままにしておく必要があります。たとえば、1日に1回しかユーザーに通知を送信しない場合は、毎日新しい接続を使用することをお奨めします。

関連する問題