public void OpenClientConnection() { lock (_syncObject) { if (_powerShellIntelliSenseService == null || _powerShellDebuggingService == null || _powerShellExplorerService == null) { EnsureCloseProcess(); var page = PowerShellToolsPackage.Instance.GetDialogPage <GeneralDialogPage>(); _hostProcess = PowershellHostProcessHelper.CreatePowerShellHostProcess(page.Bitness); _process = _hostProcess.Process; _process.Exited += ConnectionExceptionHandler; // net.pipe://localhost/UniqueEndpointGuid/{RelativeUri} var intelliSenseServiceEndPointAddress = Constants.ProcessManagerHostUri + _hostProcess.EndpointGuid + "/" + Constants.IntelliSenseHostRelativeUri; var deubggingServiceEndPointAddress = Constants.ProcessManagerHostUri + _hostProcess.EndpointGuid + "/" + Constants.DebuggingHostRelativeUri; var explorerServiceEndPointAddress = Constants.ProcessManagerHostUri + _hostProcess.EndpointGuid + "/" + Constants.ExplorerHostRelativeUri; try { _intelliSenseServiceChannelFactory = ChannelFactoryHelper.CreateDuplexChannelFactory <IPowerShellIntelliSenseService>(intelliSenseServiceEndPointAddress, new InstanceContext(PowerShellToolsPackage.Instance.IntelliSenseServiceContext)); _intelliSenseServiceChannelFactory.Faulted += ConnectionExceptionHandler; _intelliSenseServiceChannelFactory.Closed += ConnectionExceptionHandler; _intelliSenseServiceChannelFactory.Open(); _powerShellIntelliSenseService = _intelliSenseServiceChannelFactory.CreateChannel(); _debuggingServiceChannelFactory = ChannelFactoryHelper.CreateDuplexChannelFactory <IPowerShellDebuggingService>(deubggingServiceEndPointAddress, new InstanceContext(new DebugServiceEventsHandlerProxy())); _debuggingServiceChannelFactory.Faulted += ConnectionExceptionHandler; _debuggingServiceChannelFactory.Closed += ConnectionExceptionHandler; _debuggingServiceChannelFactory.Open(); _powerShellDebuggingService = _debuggingServiceChannelFactory.CreateChannel(); _powerShellDebuggingService.SetRunspace(PowerShellToolsPackage.OverrideExecutionPolicyConfiguration); // TODO: Switch to duplex if Command Explorer can respond to changes in bitness _explorerServiceChannelFactory = ChannelFactoryHelper.CreateChannelFactory <IPowerShellExplorerService>(explorerServiceEndPointAddress); //_explorerServiceChannelFactory = ChannelFactoryHelper.CreateDuplexChannelFactory<IPowerShellExplorerService>(explorerServiceEndPointAddress, new InstanceContext(new ExplorerServiceEventsHandlerProxy())); _explorerServiceChannelFactory.Faulted += ConnectionExceptionHandler; _explorerServiceChannelFactory.Closed += ConnectionExceptionHandler; _explorerServiceChannelFactory.Open(); _powerShellExplorerService = _explorerServiceChannelFactory.CreateChannel(); } catch (Exception ex) { // Connection has to be established... Log.Error("Connection establish failed...", ex); EnsureCloseProcess(); _powerShellIntelliSenseService = null; _powerShellDebuggingService = null; throw; } } } }
public void EnsureClearServiceChannel() { if (_intelliSenseServiceChannelFactory != null) { _intelliSenseServiceChannelFactory.Abort(); _intelliSenseServiceChannelFactory = null; _powerShellIntelliSenseService = null; } if (_debuggingServiceChannelFactory != null) { _debuggingServiceChannelFactory.Abort(); _debuggingServiceChannelFactory = null; _powerShellDebuggingService = null; } if (_explorerServiceChannelFactory != null) { _explorerServiceChannelFactory.Abort(); _explorerServiceChannelFactory = null; _powerShellExplorerService = null; } }