public static void Open(IProcessManagerEventProvider processManagerEventProvider)
 {
     if (_serviceHost == null || _serviceHost.State == CommunicationState.Closed || _serviceHost.State == CommunicationState.Faulted)
     {
         _processManagerService       = new ProcessManagerService();
         _processManagerEventProvider = processManagerEventProvider;
         _processManagerEventProvider.ProcessStatusesChanged += _processManagerService.ProcessManagerEventProvider_ProcessStatusesChanged;
         _processManagerEventProvider.ConfigurationChanged   += _processManagerService.ProcessManagerEventProvider_ConfigurationChanged;
         _processManagerEventProvider.DistributionCompleted  += _processManagerService.ProcessManagerEventProvider_DistributionCompleted;
         NetTcpBinding binding = new NetTcpBinding()
         {
             MaxBufferSize          = Constants.MAX_MESSAGE_SIZE,
             MaxBufferPoolSize      = Constants.MAX_MESSAGE_SIZE * 2,
             MaxReceivedMessageSize = Constants.MAX_MESSAGE_SIZE,
             ReaderQuotas           =
             {
                 MaxArrayLength = Constants.MAX_MESSAGE_SIZE
             },
             Security = { Mode = SecurityMode.None }
         };
         _serviceHost = new ServiceHost(_processManagerService, new Uri("net.tcp://" + Environment.MachineName + "/ProcessManagerService"));
         _serviceHost.AddServiceEndpoint(typeof(IProcessManagerService), binding, string.Empty);
         _serviceHost.Open();
     }
 }
 public static void Close()
 {
     if (_serviceHost != null)
     {
         _serviceHost.Close();
         _serviceHost = null;
         _processManagerEventProvider.ProcessStatusesChanged -= _processManagerService.ProcessManagerEventProvider_ProcessStatusesChanged;
         _processManagerEventProvider.ConfigurationChanged   -= _processManagerService.ProcessManagerEventProvider_ConfigurationChanged;
         _processManagerEventProvider.DistributionCompleted  -= _processManagerService.ProcessManagerEventProvider_DistributionCompleted;
         _processManagerService = null;
     }
 }