2016-10-25 1 views
0

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. Я также попытался связаться с резким автором. Пока нет ответа. Любой, имеющий такую ​​же проблему, прокомментируйте.

С уважением Аммад

ответ

0

Исключение волшебно исчезли. Я вручную загрузил исходный код push sharp. Вместо таргетинга на пакет Nuget. Я ссылаюсь на pushsharp.core и pushsharp.Apple из решения, и я не смог воспроизвести ту же проблему. Решение отлично работало без проблем с местной ссылкой на проект в решении. Я думал, что это может быть проблема с пакетом pushsharp Nuget.

Затем я удаляю pushsharp.core и pushsharp. Выполняйте проекты из решения, а затем снова загружаем и ссылаемся на пакет nuset PushSharp. На этот раз он отлично работал без исключения: «System.InvalidOperationException: коллекция была отмечена как полная с учетом дополнений».

 Смежные вопросы

  • Нет связанных вопросов^_^