public void Context_BeginRequest(object sender, EventArgs e) { if (Interlocked.Exchange(ref _isInitialRequest, 0) != 1) { return; } if (!CurrentPortMatchesDeleporterSetting((HttpApplication)sender) || RemotingChannelExists()) { return; } if (WasCompiledInDebugMode(sender)) { // Start listening for connections RemotingConfiguration.RegisterWellKnownServiceType(typeof(DeleporterService), DeleporterConfiguration.ServiceName, WellKnownObjectMode.Singleton); this._remotingChannel = DeleporterConfiguration.CreateChannel(); LoggerServer.Log("Registering remoting channel on port {0}", DeleporterConfiguration.RemotingPort); ChannelServices.RegisterChannel(this._remotingChannel, false); } else { var thisAssembly = Assembly.GetExecutingAssembly().GetName(); throw new InvalidOperationException( string.Format("You should not enable Deleporter on production web servers. As a security precaution, Deleporter won't run if your ASP.NET application was compiled in Release mode. You need to remove DeleporterServerModule from your Web.config file. If you need to bypass this, the only way is to edit the Deleporter source code and remove this check. Assembly name {0} Version {1}", thisAssembly.Name, thisAssembly.Version)); } }
public void TestLogServer() { // Arrange var endpoint = "tcp://127.0.0.1:55010"; var nsEndpoint = "tcp://127.0.0.1:55020"; var logList = new List <string>(); var mockLog = new Mock <ILogger>(); var loggerServer = new LoggerServer("Test Logger Server", endpoint, nsEndpoint, mockLog.Object); mockLog.Setup(l => l.WriteLine(It.IsAny <string>())).Callback((string msg) => { logList.Add(msg); loggerServer.Stop(); }); var task = Task.Run(() => loggerServer.StartAsync(endpoint)); Thread.Sleep(300); var pushContext = new ZContext(); var pushSocket = new ZSocket(pushContext, ZSocketType.PUSH); pushSocket.Connect(endpoint); // Act pushSocket.Send(new ZFrame("This is a message.")); task.Wait(); // Assert Assert.AreEqual(1, logList.Count); Assert.AreEqual(1, logList.Count); }
private static bool CurrentPortMatchesDeleporterSetting(HttpApplication httpApplication) { // Only spin up the remoting channel if we are running on the same port as the settings var iisPort = int.Parse(httpApplication.Request.ServerVariables["SERVER_PORT"]); LoggerServer.Log("{0} - web.config WebHostPort: {1} running port: {2}", DeleporterConfiguration.WebHostPort == iisPort ? "Match" : "MisMatch", DeleporterConfiguration.WebHostPort, iisPort); return(DeleporterConfiguration.WebHostPort == iisPort); }
public void Dispose() { if (this._remotingChannel != null) { LoggerServer.Log("Disposing of Remoting Channel"); ChannelServices.UnregisterChannel(this._remotingChannel); } LoggerServer.Dispose(); }
public void TestLogServerFromClient() { // Arrange var endpoint = "tcp://127.0.0.1:55011"; var nsEndpoint = "tcp://127.0.0.1:55021"; var msgPushSocket = "This is a message from a PUSH zsocket."; var msgLogger = "This is a test message from the LoggerClient."; var clientName = "Test Client"; var systemRegistration = new SystemRegistration(clientName, endpoint) { Id = 1 }; var logList = new List <string>(); var mockLog = new Mock <ILogger>(); var loggerServer = new LoggerServer("Test Logger Server", endpoint, nsEndpoint, mockLog.Object); mockLog.Setup(l => l.WriteLine(It.IsAny <string>())).Callback((string msg) => { logList.Add(msg); if (logList.Count > 1) { loggerServer.Stop(); } }); var task = Task.Run(() => loggerServer.StartAsync(endpoint)); Thread.Sleep(300); var pushContext = new ZContext(); var pushSocket = new ZSocket(pushContext, ZSocketType.PUSH); pushSocket.Connect(endpoint); var loggerClient = new LoggerClient(endpoint, clientName, nsEndpoint); var vts = new VectorTimeStamp(); vts.Update(systemRegistration.Id, DateTime.Now); // Act loggerClient.WriteLine(msgLogger, vts); Thread.Sleep(25); pushSocket.Send(new ZFrame(msgPushSocket)); task.Wait(); // Assert Assert.AreEqual(2, logList.Count); Assert.AreEqual($"{clientName}:{vts}: {msgLogger}", logList[0]); Assert.AreEqual(msgPushSocket, logList[1]); }
private static bool WasCompiledInDebugMode(object value) { // In case the app class is auto-generated from a Global.asax file, check its base classes too, going down until we hit ASP.NET itself var assembliesToCheck = GetInheritanceChain(value.GetType()).Select(x => x.Assembly).TakeWhile( x => x != typeof(HttpApplication).Assembly).Distinct().ToList(); var wasCompiledInDebugMode = assembliesToCheck.Any(AssemblyWasCompiledInDebugMode); if (!wasCompiledInDebugMode) { LoggerServer.Log("No assemblies found to be in Debug Mode - List of Assemblies:"); assembliesToCheck.ForEach(x => LoggerServer.Log(x.Location)); } return(wasCompiledInDebugMode); }
/// <summary> /// Initialises this instance. /// </summary> private void EnsureInitialised() { if (!_inited) { // get flight program flightProgramScript = PartScript.GetModifier <FlightProgramScript>(); if (flightProgramScript == null) { Debug.LogError("Logger script has no flight program: deactivating"); enabled = false; return; } server = new LoggerServer(Data.Hostname, Data.Port); _inited = true; } }