Pushsharp версии 4.0Коллекция была помечена как в комплекте с относительно дополнений в APNSBroker очереди оповещении Нажмите Sharp
Я получаю исключение «System.InvalidOperationException: Коллекция была помечена как в комплекте с относительно дополнений». После поиска в течение нескольких часов я узнал, что это связано с тем, что уведомление о очереди не принимает тот же идентификатор, когда он называется 2-й раз. Моя проблема заключается в том, что если эта служба запущена, я отправляю уведомление пользователю-токен-1 и через несколько секунд, если я отправлю уведомление одному и тому же пользователю с тем же User-token-1, то получаю исключение.
Чтобы создать эту проблему, просто отправьте уведомление два раза одному пользователю, но дважды вызовите эту функцию кода не в одном настраиваемом сообщении. Я отправляю его два раза, потому что у меня есть требование отправить несколько уведомлений одному пользователю, но не в однонаправленное сообщение, а другое push-сообщение. Чтобы дать представление о том, как эта ошибка может быть воспроизведена, пожалуйста, поймите следующую ситуацию и, пожалуйста, игнорируйте мои пользовательские переменные. Несмотря на то, что если я игнорирую это, как вызов SendPushMessageToEmployees только один раз, то позже, если мне нужно отправить уведомление одному и тому же пользователю через несколько минут на той же запущенной службе, тогда я получу такое же исключение.
main()
{
SendPushMessageToEmployees(MyCustomMessage);
SendPushMessageToEmployees(MyCustomMessage);
}
public void SendNotification(List<PushMessage> pushMessages)
{
try
{
apnsBroker.Start();
foreach (PushMessage message in pushMessages)
{
if (!String.IsNullOrEmpty(message.DeviceId))
{
apnsBroker.QueueNotification(new ApnsNotification
{
DeviceToken = message.DeviceId,
Payload = JObject.Parse("{\"aps\":{\"badge\":0,\"alert\":'" + message.Message + "',\"Workflow\":'" + message.Message + "'}}")
});
}
}
apnsBroker.Stop(true);
}
catch (Exception ex)
{
Console.WriteLine("{0}",ex.Message);
}
}
Исключение: System.InvalidOperationException: Коллекция была помечена как в комплекте с относительно дополнений. StackTrace: System.Collections.Concurrent.BlockingCollection 1.TryAddWithNoTimeValidation(T item, Int32 millisecondsTimeout, CancellationToken cancellationToken) at PushSharp.Core.ServiceBroker
1.QueueNotification (TNotification уведомление)
класс в моем проекте
public class AppleServiceBroker : IServiceBroker
{
private ApnsServiceBroker apnsBroker;
public AppleServiceBroker()
{
if (apnsBroker == null)
{
var config = new ApnsConfiguration(ApnsConfiguration.ApnsServerEnvironment.Sandbox,
"PushNotification.p12", "MyPassword");
apnsBroker = new ApnsServiceBroker(config);
// Wire up events
apnsBroker.OnNotificationFailed += (notification, aggregateEx) =>
{
aggregateEx.Handle(ex =>
{
if (ex is ApnsNotificationException)
{
var notificationException = (ApnsNotificationException)ex;
var apnsNotification = notificationException.Notification;
var statusCode = notificationException.ErrorStatusCode;
Console.WriteLine("Apple Notification Failed: ID= " + apnsNotification.Identifier + " Code= " + statusCode);
}
else
{
Console.WriteLine("Apple Notification Failed for some unknown reason : " + ex.InnerException);
}
return true;
});
};
}
}
/// <summary>
/// Sends notification to apple servers
/// </summary>
/// <param name="pushMessages">List of push messages</param>
public void SendNotification(List<PushMessage> pushMessages)
{
try
{
apnsBroker.OnNotificationSucceeded += (notification) =>
{
Console.WriteLine("Apple Notification Sent!");
};
apnsBroker.Start();
foreach (PushMessage message in pushMessages)
{
if (!String.IsNullOrEmpty(message.DeviceId))
{
apnsBroker.QueueNotification(new ApnsNotification
{
DeviceToken = message.DeviceId,
Payload = JObject.Parse("{\"aps\":{\"badge\":0,\"alert\":'" + message.Message + "',\"Workflow\":'" + message.Message + "'}}")
});
}
}
apnsBroker.Stop(true);
}
catch (Exception ex)
{
Console.WriteLine("{0}",ex.Message);
}
}
}
`
Я видел это, но не answer Помогите. Поскольку я использую пакет Push Sharp Nuget. Я также попытался связаться с резким автором. Пока нет ответа. Любой, имеющий такую же проблему, прокомментируйте.
С уважением Аммад