Ошибка уведомления PushSharp APNS Запрошенная функция не поддерживается

#c# #.net #apple-push-notifications #pushsharp

#c# #.net #apple-push-уведомления #pushsharp

Вопрос:

Я использую PushSharp 4.0.10 В событии OnNotificationFailed брокера Apns, я получаю исключение «Запрошенная функция не поддерживается». Есть создатель моего брокера

 private static ApnsServiceBroker CreateApnsBroker(string certificate)
{
    // Configuration (NOTE: .pfx can also be used here)
    var config = newApnsConfiguration(
        ApnsConfiguration.ApnsServerEnvironment.Sandbox,
        certificate,
        ConfigurationManager.AppSettings["Cert_Passwd"],
        false);

    // Create a new broker
    var apnsBroker = new ApnsServiceBroker(config);

    // Wire up events
    apnsBroker.OnNotificationFailed  = (notification, aggregateEx) =>
    {
        aggregateEx.Handle(ex =>
        {
            // See what kind of exception it was to further diagnose
            if (ex is ApnsNotificationException notificationException)
            {
                // Deal with the failed notification
                var apnsNotification = notificationException.Notification;
                var statusCode = notificationException.ErrorStatusCode;

                Logger.Info($"Apple Notification Failed:
                    ID={apnsNotification.Identifier},
                    Code={statusCode}",
                    ex);
            }
            else
            {
                // Inner exception might hold more useful information
                // like an ApnsConnectionException
                Logger.Info($"Apple Notification Failed for some unknown reason:
                    {ex.InnerException}",
                    ex);
            }
                // Mark it as handled
                return true;
            });
    };

    apnsBroker.OnNotificationSucceeded  = (notification) =>
    {
        Logger.Info($"Apple Notification Sent for device {notification.DeviceToken}");
    };

    return apnsBroker;
}
  

Отправить уведомление

 private static void QueueNotification(
    ApnsServiceBroker apnsBroker,
    string deviceToken,
    string payload)
{
    // Queue a notification to send
    apnsBroker.QueueNotification(new ApnsNotification
    {
        DeviceToken = deviceToken,
        Payload = JObject.Parse(payload),
        Expiration = DateTime.Now.AddDays(2)
    });
}
  

Когда я останавливаю брокера в OnNotificationFailed, возникает исключение catch. В PushSharp и в моем коде я использую ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12
Используя сертификат .p12 для уведомлений voip, он добавлен в mmc
В чем моя ошибка?

Комментарии:

1. У меня такая же проблема. Несколько дней назад все работало нормально. Сегодня это не так. Вы обновили Windows 10? Я сделал…

Ответ №1:

Я клонирую репозиторий PushSharp, компилирую локальную dll, меняю ссылки на проект, и это работает, но я не знаю почему.

Ответ №2:

Похоже, что пакет в Nuget не соответствует коду в Github. Последняя версия на Github поддерживает протокол TLS 1.2, который недавно стал обязательным. Поэтому единственным решением является клонирование репозитория, создание его самостоятельно и добавление ссылки на недавно созданную DLL.

Ответ №3:

Временное исправление:

System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls12;

Поместите это в свой application_startup или startup.cs