【问题标题】:Sometimes I have Timeout exception when I send APN to apple server有时我将 APN 发送到苹果服务器时出现超时异常
【发布时间】:2017-08-28 20:53:44
【问题描述】:

我的代码:

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(任务任务) 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务) 在 HttpTwo.Http2Client.d__15.MoveNext()

【问题讨论】:

  • 我们也有这个。你找到解决办法了吗?
  • 我也有同样的问题,有解决办法吗?
  • 我在一台运行 Windows Server 2016 数据中心版的服务器上遇到了完全相同的问题。在两台 PC 上尝试过,在那里和服务器上得到了非常不同的结果。与这个 sn-p 的唯一区别是我使用的是 HttpTwo 的 HttpClient API 而不是 Http2Client - 但也尝试直接使用 Http2Client 并得到相同的结果。尝试针对 .Net 4.5.2 和 4.7 所以在服务器上,大约 50% 的推送运行到超时。在我的一台 PC(均为 Windows 10)上,大约 10% 的推送。在另一台 PC 上,所有请求都超时。有人有什么想法吗?

标签: c# apple-push-notifications http2


【解决方案1】:

您可以为您的连接设置 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 的连接处于打开状态;不要反复打开和关闭连接。 APNs 将快速连接和断开连接视为拒绝服务攻击。您应该让连接保持打开状态,除非您知道它会长时间闲置 - 例如,如果您每天只向用户发送一次通知,则每天使用新连接是可接受的做法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-12
    • 2012-02-16
    • 2014-09-29
    • 1970-01-01
    • 2016-11-06
    相关资源
    最近更新 更多