Apple Push-уведомления на Windows Server 2008 не работают

Я застрял, и я надеюсь, что кто-то здесь поможет мне.

В течение нескольких дней я пытаюсь отправить push-уведомления Apple с сервера Windows 2008. Но ничего не отправляется и не принимается. На самом деле, я переместил все в простое приложение mvc, чтобы его было проще отлаживать, и я заметил, что оно зависает, когда я пытаюсь принудительно отправить push-уведомления (на push.StopAllServices(true);). Они работали (и все еще есть) из Windows Server 2012R2 с тем же подходом к отправке уведомлений, поэтому я думаю, что сертификаты и код в порядке.

  • Я использую службу Windows и нажимаю Sharp для отправки уведомлений. целевые рамки: 4
  • Тестовый проект представляет собой целевую структуру MVC 2.0 4.
  • Я установил asp.net 4.5 на сервер
  • Я установил сертификат через mmc в Personal (закрытый ключ доступен, предоставлено разрешение для IUSR и IIS_USRS) и доверенных корневых центров сертификации.
  • Порт 2195 открыт

Вот код:

private void Initizalize()
        {
            push = new PushBroker();

            //appleCert is path to my .p12 certificate on disk.     
            var cert = new ApplePushChannelSettings(false, appleCert, "***");

            //I've read somewhere that it was helpful to force send notifications. Well, in my case it's not. 
            var settings = new PushServiceSettings();

            settings.AutoScaleChannels = false;
            settings.Channels = 3;
            settings.MaxAutoScaleChannels = 3;


            //Wire up the events for all the services that the broker registers
            push.OnNotificationSent += NotificationSent;
            push.OnChannelException += ChannelException;
            push.OnServiceException += ServiceException;
            push.OnNotificationFailed += NotificationFailed;
            push.OnDeviceSubscriptionExpired += DeviceSubscriptionExpired;
            push.OnDeviceSubscriptionChanged += DeviceSubscriptionChanged;
            push.OnChannelCreated += ChannelCreated;
            push.OnChannelDestroyed += ChannelDestroyed;

            push.RegisterAppleService(cert, settings);
        }

public void SendPush()
        {
            Initizalize();
            var token = hard coded token that exists;
            var output = "msg";
            push.QueueNotification(new AppleNotification()
                                       .ForDeviceToken(token)
                                       .WithAlert(output)
                                       .WithBadge(1)
                                       .WithSound("default"));

            push.StopAllServices(true);
        }

Он вызывает событие «OnNotificationSent», ничего больше.

Еще один момент, который может быть важен. Отправка и получение push-уведомлений работала и работает с Windows Server 2012, но это виртуальная машина Windows Azure, поэтому установка сертификата отличается.

Любые идеи? Даже информация о том, что это невозможно сделать, будет полезной!

редактировать: одна проблема решена:

Очевидно, вам нужно иметь ссылку на NewtonSoft.Json, чтобы вызвать StopAllServices. Теперь он не зависает, но устройство ничего не получает.




Ответы (1)


Похоже, что в Windows Server 2008 закрытый ключ сертификатов apns должен предоставлять разрешение пользователю, который хочет его использовать.

Как я уже писал ранее, я предоставил его для IIS_USRS, но это только для приложений, работающих под управлением IIS. И поскольку я использовал службу Windows, она не работала. Итак, что я сделал, так это проверил пользователя для службы Windows (Службы -> Войти как) и предоставил разрешение на закрытый ключ сертификатов для этого пользователя.

person joanna    schedule 01.07.2014