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();
}