protected override void OnStart() { // restore un-expired connections Logger.LogDebug("Restoring connections..."); DateTimeOffset dtNow = DateTimeOffset.Now; List <CommonItem> connItems = _cacheEngine.GetCacheItems( null, ItemKind.Local, typeof(ClientConnectionState).FullName, null, 0, dtNow, true, false); foreach (CommonItem item in connItems) { try { var oldConn = XmlSerializerHelper.DeserializeFromString <ClientConnectionState>( CompressionHelper.DecompressToString(item.YData)); IConnection connection = null; if (oldConn.Contract == typeof(ITransferV341).FullName) { var clientId = new Guid(oldConn.SourceId); connection = new ConnectionV34( Logger, _cacheEngine, _serverCfg, clientId, oldConn.ReplyAddress, NodeType.Client); connection.ExtendExpiry(); _connectionIndex.Set(clientId, connection); } if (connection != null) { Logger.LogDebug("Restored connection:"); Logger.LogDebug(" Client Id. : {0}", connection.ClientId); Logger.LogDebug(" Client Addr: {0}", connection.ReplyAddress); } else { Logger.LogDebug("Ignoring unsupported connection: '{0}'", oldConn.ReplyAddress); } } catch (Exception e) { // failed, however the show must go on Logger.Log(e); } } // restore subscriptions Logger.LogDebug("Restoring subscriptions..."); List <CommonItem> subsItems = _cacheEngine.GetCacheItems( null, ItemKind.Local, typeof(ClientSubscriptionState).FullName, null, 0, dtNow, true, false); foreach (CommonItem item in subsItems) { try { var oldSubscription = XmlSerializerHelper.DeserializeFromString <ClientSubscriptionState>( CompressionHelper.DecompressToString(item.YData)); var subscription = new ClientSubscription(oldSubscription); var clientId = new Guid(oldSubscription.ConnectionId); IConnection connection = GetValidConnection(clientId); if (connection != null) { _cacheEngine.RestoreSubscription(subscription); Logger.LogDebug("Restored subscription:"); Logger.LogDebug(" Client Id: {0}", connection.ClientId); Logger.LogDebug(" Address : {0}", connection.ReplyAddress); Logger.LogDebug(" Subs. Id : {0}", subscription.SubscriptionId); Logger.LogDebug(" AppScopes: {0}", (subscription.AppScopes == null) ? "*" : String.Join(",", subscription.AppScopes)); Logger.LogDebug(" ItemKind : {0}", (subscription.ItemKind == ItemKind.Undefined) ? "(any)" : subscription.ItemKind.ToString()); Logger.LogDebug(" DataType : {0}", subscription.DataTypeName ?? "(any)"); Logger.LogDebug(" Query : {0}", subscription.Expression.DisplayString()); Logger.LogDebug(" MinimumUSN > : {0}", subscription.MinimumUSN); Logger.LogDebug(" Excl.Deleted?: {0}", (subscription.ExcludeDeleted)); Logger.LogDebug(" Excl.DataBody: {0}", subscription.ExcludeDataBody); } else { _cacheEngine.DeleteSubscriptionState(subscription.SubscriptionId); Logger.LogDebug("Ignoring expired subscription id: {0}", oldSubscription.SubscriptionId); } } catch (Exception e) { // failed, however the show must go on Logger.Log(e); } } string svcName = EnvHelper.SvcPrefix(SvcId.CoreServer); // discovery service _discoverV111ServerHost = new CustomServiceHost <IDiscoverV111, DiscoverRecverV111>( Logger, new DiscoverRecverV111(this), _serverCfg.V31DiscoEndpoints, svcName, typeof(IDiscoverV111).Name, true); // V3.4 services _sessCtrlV131ServerHost = new CustomServiceHost <ISessCtrlV131, SessCtrlRecverV131>( Logger, new SessCtrlRecverV131(this), _serverCfg.V31DiscoEndpoints, svcName, typeof(ISessCtrlV131).Name, true); _transferV341ServerHost = new CustomServiceHost <ITransferV341, TransferRecverV341>( Logger, new TransferRecverV341(this), _serverCfg.V31AsyncEndpoints, svcName, typeof(ITransferV341).Name, true); // start housekeeping timer _housekeepTimer = new Timer(DispatchHousekeepTimeout, null, ServerCfg.CommsHousekeepInterval, ServerCfg.CommsHousekeepInterval); }