/// <summary> /// Recovers the session context. /// </summary> /// <param name="group">The group.</param> public void RecoverSessionContext(ComDaGroup group) { // create a new subscription and copy existing one. Subscription discardSubscription = group.Subscription; Subscription subscription = new Subscription(); subscription.DisplayName = discardSubscription.DisplayName; subscription.PublishingInterval = discardSubscription.PublishingInterval; subscription.KeepAliveCount = discardSubscription.KeepAliveCount; subscription.LifetimeCount = discardSubscription.LifetimeCount; subscription.MaxNotificationsPerPublish = discardSubscription.MaxNotificationsPerPublish; subscription.Priority = discardSubscription.Priority; subscription.PublishingEnabled = discardSubscription.PublishingEnabled; subscription.DisableMonitoredItemCache = discardSubscription.DisableMonitoredItemCache; try { discardSubscription.Dispose(); } catch (Exception) { } m_session.AddSubscription(subscription); try { // create the initial subscription. subscription.Create(); // set the keep alive interval to 30 seconds and the the lifetime interval to 5 minutes. subscription.KeepAliveCount = (uint)((30000 / (int)subscription.CurrentPublishingInterval) + 1); subscription.LifetimeCount = (uint)((600000 / (int)subscription.CurrentPublishingInterval) + 1); // update the subscription. subscription.Modify(); } catch (Exception e) { m_session.RemoveSubscription(subscription); throw ComUtils.CreateComException(e, ResultIds.E_FAIL); } // update the group. group.ActualUpdateRate = (int)(subscription.CurrentPublishingInterval * 2); group.Subscription = subscription; group.RecreateItems(); }