private void Connect()
        {
            IWuRemoteService service = null;
            var callbackReceiver     = new CallbackReceiver();

            lock (ServiceLock)
            {
                ThrowIfDisposed();
                service = _serviceFactory.GetInstance(_binding, _address, callbackReceiver);
                if (!(service is IChannel))
                {
                    throw new InvalidOperationException(
                              $"{nameof(service)} must implement interface {nameof(IChannel)}.");
                }

                if (service != null)
                {
                    var channel = ((IChannel)service);
                    channel.Faulted += (s, e) => { OnPropertyChanged("ConnectionState"); };
                    channel.Closed  += (s, e) => { OnPropertyChanged("ConnectionState"); };
                    channel.Closing += (s, e) => { OnPropertyChanged("ConnectionState"); };
                    channel.Opened  += (s, e) => { OnPropertyChanged("ConnectionState"); };
                    channel.Opening += (s, e) => { OnPropertyChanged("ConnectionState"); };

                    _callbackReceiver          = callbackReceiver;
                    _callbackReceiver.Endpoint = this;
                    Service = service;
                }
            }
            OnPropertyChanged("ConnectionState");
        }
        private UpdateDescriptionViewModel SetupViewModelState(IWuRemoteService serviceMock = null, IModalService modalMock = null, UpdateDescription updateDesc = null)
        {
            serviceMock = (serviceMock != null) ? serviceMock : MoqFactory.Create <IWuRemoteService>(MockBehavior.Loose).Object;
            var endpointMock = MoqFactory.Create <IWuEndpoint>();

            endpointMock.Setup(e => e.Service).Returns(serviceMock);
            endpointMock.Setup(e => e.ConnectionState).Returns(System.ServiceModel.CommunicationState.Opened);
            endpointMock.Setup(e => e.IsDisposed).Returns(false);
            endpointMock.Setup(e => e.FQDN).Returns("mock");
            modalMock  = (modalMock != null) ? modalMock : MoqFactory.Create <IModalService>(MockBehavior.Loose).Object;
            updateDesc = (updateDesc != null) ? updateDesc : new UpdateDescription();
            return(new UpdateDescriptionViewModel(modalMock, updateDesc, endpointMock.Object));
        }
 public void Dispose()
 {
     lock (ServiceLock)
     {
         if (Log.IsDebugEnabled)
         {
             Log.Debug($"Disposing endpoint {_fqdn}");
         }
         try
         {
             ((IChannel)Service)?.Close();
         }
         catch (Exception e)
         {
             Log.Warn(e);
         }
         finally
         {
             _callbackReceiver = null;
             Service           = null;
             IsDisposed        = true;
         }
     }
 }