Я застрял, и я надеюсь, что кто-то здесь поможет мне.
В течение нескольких дней я пытаюсь отправить 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. Теперь он не зависает, но устройство ничего не получает.