public void Dispose() { if (!this.IsDisposed) { if (_subscription.Recoverable && !MessageQueue.Exists(_queuePath)) { MessageQueue.Create(this._queuePath); } try { _serverDisposable.Dispose(); var serverLease = (ILease)RemotingServices.GetLifetimeService((MarshalByRefObject)_serverDisposable); if (serverLease != null) { serverLease.Unregister(Sponsor); } } catch { } finally { _isDisposed = true; _subscription = null; } } }