Почему HttpNotificationChannel.Open выдает ArgumentException () E_INVALIDARG? - PullRequest
2 голосов
/ 04 февраля 2011

Вот мой код. Все работает нормально при первом запуске, то есть HttpNotificationChannel.Find () возвращает ноль.

Но во второй раз, когда я запускаю его, Find () возвращает правильную вещь, однако, когда я получаю вызов Open (), он выдает исключение. Что действительно странно, поскольку Open () не принимает никаких аргументов.

Что я делаю не так?

  public string ChannelName = "MyAppChannel";
  ...
  NotificationChannel = HttpNotificationChannel.Find(ChannelName);
  if (NotificationChannel == null)
  {
    NotificationChannel = new HttpNotificationChannel(ChannelName);
  }
  NotificationChannel.ChannelUriUpdated += new EventHandler(Channel_ChannelUriUpdated);
  NotificationChannel.HttpNotificationReceived += new EventHandler(NotificationChannel_HttpNotificationReceived);
  NotificationChannel.ErrorOccurred += new EventHandler(Channel_ErrorOccurred);
  NotificationChannel.Open();         // <-- Kaboom here, the 2nd time 

Вот полный текст и стек:

System.ArgumentException: E_INVALIDARG
   at Microsoft.Phone.Notification.SafeNativeMethods.ThrowExceptionFromHResult(Int32 hr, Exception defaultException, NotificationType type)
   at Microsoft.Phone.Notification.HttpNotificationChannel.Open()
   at LiveShare.NotificationManager.Initialize()
   at LiveShare.App..ctor()
   at System.Reflection.RuntimeConstructorInfo.InternalInvoke(RuntimeConstructorInfo rtci, BindingFlags invokeAttr, Binder binder, Object parameters, CultureInfo culture, Boolean isBinderDefault, Assembly caller, Boolean verifyAccess, StackCrawlMark& stackMark)
   at System.Reflection.RuntimeConstructorInfo.InternalInvoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, StackCrawlMark& stackMark)
   at System.Reflection.ConstructorInfo.Invoke(Object[] parameters)
   at MS.Internal.TypeProxy.<>c__DisplayClass30.b__2a()
   at MS.Internal.TypeProxy.CreateInstance(UInt32 customTypeId)
   at MS.Internal.FrameworkCallbacks.CreateKnownObject(IntPtr nativeRootPeer, UInt32 customTypeId, String initializationString, IntPtr& nativePeer, UInt32 isCreatedByParser)
   at MS.Internal.FrameworkCallbacks.CreateUnknownObject(String assemblyName, String typeName, IntPtr nativeRootPeer, String initializationString, UInt32& customTypeId, UInt32& coreTypeId, UInt32& typeFlags, IntPtr& nativePeer)

Ответы [ 2 ]

2 голосов
/ 15 февраля 2011

Правильное решение - не звонить Open(), если Find() успешно.

1 голос
/ 04 февраля 2011

Это выглядит очень похоже на задокументированную проблему с ОСАГО, как , описанную Ником Харрисом в прошлом апреле.этот канал возникнет почти сразу после нажатия кнопки «Отладка» при запуске эмулятора.Решение простое - дайте эмулятору две минуты перед вызовом.

Если это не так, есть хорошая статья о Silverlight Show , которая охватывает push-уведомления в WP7приложение котировки акций.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...