/// <summary> /// Initializes a new instance of the <see cref="SessionProxyController"/> class. /// </summary> /// <param name="sessionId">The session unique identifier.</param> public SessionProxyController(string sessionId) { _sessionId = sessionId; string extension = "{0}-{1}".FormatWith(sessionId, Guid.NewGuid().ToShortString()); _endpoint = WcfService.SessionProxy.GetLocalHttpUri(extension); // Instatiate the proxy and start the backend service for STF Lite if (GlobalSettings.IsDistributedSystem == false) { FrameworkServicesInitializer.InitializeExecution(); _sessionProxy = new SessionProxy(sessionId); _sessionProxy.StartBackendService(); } }
static void Main(string[] args) { var database = args[0]; _sessionId = args[1]; var proxyServiceUri = new Uri(args[2]); TraceFactory.SetThreadContextProperty("PID", Process.GetCurrentProcess().Id.ToString()); TraceFactory.SetSessionContext(_sessionId); TraceFactory.Logger.Debug(string.Join(", ", args)); UnhandledExceptionHandler.Attach(); GlobalSettings.Load(database); FrameworkServicesInitializer.InitializeExecution(); try { using (var sessionProxy = new SessionProxy(_sessionId)) { sessionProxy.OnExit += _sessionProxy_OnExit; sessionProxy.StartFrontendService(proxyServiceUri); sessionProxy.StartBackendService(); TraceFactory.Logger.Debug("Notify Dispatcher process is up..."); Retry.WhileThrowing ( () => { using (var connection = SessionDispatcherConnection.Create("localhost")) { connection.Channel.NotifyProxyStarted(_sessionId); } }, 10, TimeSpan.FromSeconds(2), new List<Type>() { typeof(EndpointNotFoundException) } ); TraceFactory.Logger.Debug("Notify Dispatcher process is up...Done"); _mainThreadBlock.WaitOne(); } } catch (Exception ex) { TraceFactory.Logger.Error(ex); } }