我的代码:
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);
这段代码大部分时间给出了适当的响应,但有一段时间我得到的操作已经超时了Exception .
---> System.TimeoutException:操作已超时 . 在HttpTwo.Http2Client.d__19.MoveNext()---从抛出异常的先前位置的堆栈跟踪结束---在System.Runtime.CompilerServices.TaskAwaiter的System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)处 . HttpTwo.Http2Client.d__17.MoveNext()中的HandleNonSuccessAndDebuggerNotification(任务任务)---从抛出异常的上一个位置的堆栈跟踪结束---在System.Runtime的System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)处HttpTwo.Http2Client.d__15.MoveNext()中的.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)
1 回答
您可以为您的连接设置Http2Client.ConnectionSettings.ConnectionTimeout,以便更可预测)))并且您应该为apns连接实现重新连接逻辑 . 像这样的东西:
来自文档:
通过多个通知保持与APN的连接;不要反复打开和关闭连接 . APN将快速连接和断开视为拒绝服务攻击 . 您应该保持连接打开,除非您知道它将在一段时间内处于空闲状态 - 例如,如果您每天只向用户发送一次通知,则可以接受每天使用新连接的做法 .