public DataBaseCollection(CremaHost cremaHost, string address, string dataBase, ServiceInfo serviceInfo) { this.cremaHost = cremaHost; this.userContext = cremaHost.UserContext; this.serviceDispatcher = new CremaDispatcher(this); var metaData = this.serviceDispatcher.Invoke(() => { this.service = DataBaseCollectionServiceFactory.CreateServiceClient(address, serviceInfo, this); this.service.Open(); if (this.service is ICommunicationObject service) { service.Faulted += Service_Faulted; } ResultBase <DataBaseCollectionMetaData> result; result = dataBase == null ? this.service.Subscribe(cremaHost.AuthenticationToken) : this.service.SubscribeDataBase(cremaHost.AuthenticationToken, dataBase); result.Validate(); #if !DEBUG this.timer = new Timer(30000); this.timer.Elapsed += Timer_Elapsed; this.timer.Start(); #endif return(result.Value); }); this.Initialize(metaData); this.CremaHost.AddService(this); }
void IDataBaseCollectionServiceCallback.OnServiceClosed(SignatureDate signatureDate, CloseInfo closeInfo) { this.service.Abort(); this.service = null; this.timer?.Dispose(); this.timer = null; this.serviceDispatcher.Dispose(); this.serviceDispatcher = null; this.InvokeAsync(() => { this.CremaHost.RemoveService(this); }, nameof(IDataBaseCollectionServiceCallback.OnServiceClosed)); }
private void Service_Faulted(object sender, EventArgs e) { this.serviceDispatcher.Invoke(() => { try { this.service.Abort(); this.service = null; } catch { } this.timer?.Dispose(); this.timer = null; this.serviceDispatcher.Dispose(); this.serviceDispatcher = null; }); this.InvokeAsync(() => { this.CremaHost.RemoveService(this); }, nameof(Service_Faulted)); }
public void Close(CloseInfo closeInfo) { this.serviceDispatcher?.Invoke(() => { this.timer?.Dispose(); this.timer = null; if (this.service != null) { try { if (closeInfo.Reason != CloseReason.NoResponding) { this.service.Unsubscribe(); if (Environment.OSVersion.Platform == PlatformID.Win32NT) { this.service.Close(); } else { this.service.Abort(); } } else { this.service.Abort(); } } catch { this.service.Abort(); } this.service = null; } this.serviceDispatcher.Dispose(); this.serviceDispatcher = null; }); }