[ASP.NET] 基于.Net Remoting 的网站访问监控模块
监控公司局域网的网站访问情况。
项目1:
新建类MonitorHttpModule.cs
项目2:
新建类MonitorClass.cs
项目3:
新建Console 项目
项目1:
新建类MonitorHttpModule.cs
Code
namespace HouseProgram.HttpModule
{
public class MonitorHttpModule :IHttpModule
{
public void Init(HttpApplication application)
{
if (ChannelServices.RegisteredChannels.Length > 0)
{
}
else
{
ChannelServices.RegisterChannel(new TcpClientChannel(), false);
}
application.BeginRequest += new EventHandler(application_BeginRequest);
}
void application_BeginRequest(object sender, EventArgs e)
{
try
{
HttpContext context = ((HttpApplication)sender).Context;
MonitorClass obj = (MonitorClass)Activator.GetObject(typeof(MonitorClass), "tcp://sz389:8085/HouseProgramMonitor");
if (obj == null)
{
}
else
{
StringBuilder sb = new StringBuilder();
sb.AppendLine(String.Format("Time:[ {0} ] IP:[ {1} ] Type:[ {2} ]", DateTime.Now.ToString(), context.Request.UserHostAddress, context.Request.RequestType));
if (!String.IsNullOrEmpty(context.Request.ContentType))
{
sb.AppendLine(context.Request.ContentType);
}
if (!String.IsNullOrEmpty(context.Request.Form.ToString()))
{
sb.AppendLine(context.Request.Form.ToString().Replace("&","\r\n"));
}
sb.AppendLine(context.Request.Url.ToString());
obj.RecordInfo(sb.ToString(), context.Request.RequestType);
}
}
catch
{
}
}
public void Dispose()
{
}
}
}
生成dll,在站点的Web.config 文件中加入以下节点:namespace HouseProgram.HttpModule
{
public class MonitorHttpModule :IHttpModule
{
public void Init(HttpApplication application)
{
if (ChannelServices.RegisteredChannels.Length > 0)
{
}
else
{
ChannelServices.RegisterChannel(new TcpClientChannel(), false);
}
application.BeginRequest += new EventHandler(application_BeginRequest);
}
void application_BeginRequest(object sender, EventArgs e)
{
try
{
HttpContext context = ((HttpApplication)sender).Context;
MonitorClass obj = (MonitorClass)Activator.GetObject(typeof(MonitorClass), "tcp://sz389:8085/HouseProgramMonitor");
if (obj == null)
{
}
else
{
StringBuilder sb = new StringBuilder();
sb.AppendLine(String.Format("Time:[ {0} ] IP:[ {1} ] Type:[ {2} ]", DateTime.Now.ToString(), context.Request.UserHostAddress, context.Request.RequestType));
if (!String.IsNullOrEmpty(context.Request.ContentType))
{
sb.AppendLine(context.Request.ContentType);
}
if (!String.IsNullOrEmpty(context.Request.Form.ToString()))
{
sb.AppendLine(context.Request.Form.ToString().Replace("&","\r\n"));
}
sb.AppendLine(context.Request.Url.ToString());
obj.RecordInfo(sb.ToString(), context.Request.RequestType);
}
}
catch
{
}
}
public void Dispose()
{
}
}
}
Code
<system.web>
<httpModules>
<add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
<add name="MonitorHttpModule" type="HouseProgram.HttpModule.MonitorHttpModule"/>
</httpModules>
</system.web>
<system.web>
<httpModules>
<add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
<add name="MonitorHttpModule" type="HouseProgram.HttpModule.MonitorHttpModule"/>
</httpModules>
</system.web>
项目2:
新建类MonitorClass.cs
Code
public class MonitorClass : MarshalByRefObject
{
public MonitorClass()
{
//Console.WriteLine(String.Format("Client Constructor Called DateTime: [ {0} ]", DateTime.Now.ToString()));
}
~MonitorClass()
{
//Console.WriteLine(String.Format("Client Destructor Called DateTime: [ {0} ]", DateTime.Now.ToString()));
}
public delegate void RecordInfoHandler(string msg, string requestType);
public static event RecordInfoHandler OnRecordInfoEvent;
public void RecordInfo(string msg, string requestType)
{
if (OnRecordInfoEvent != null)
{
OnRecordInfoEvent(msg, requestType);
}
}
}
public class MonitorClass : MarshalByRefObject
{
public MonitorClass()
{
//Console.WriteLine(String.Format("Client Constructor Called DateTime: [ {0} ]", DateTime.Now.ToString()));
}
~MonitorClass()
{
//Console.WriteLine(String.Format("Client Destructor Called DateTime: [ {0} ]", DateTime.Now.ToString()));
}
public delegate void RecordInfoHandler(string msg, string requestType);
public static event RecordInfoHandler OnRecordInfoEvent;
public void RecordInfo(string msg, string requestType)
{
if (OnRecordInfoEvent != null)
{
OnRecordInfoEvent(msg, requestType);
}
}
}
项目3:
新建Console 项目
Code
namespace HouseProgram.RemotingServer
{
class Program
{
static void Main(string[] args)
{
TcpServerChannel channel = new TcpServerChannel(8085);
ChannelServices.RegisterChannel(channel, false);
RemotingConfiguration.RegisterWellKnownServiceType(typeof(MonitorClass), "HouseProgramMonitor", WellKnownObjectMode.SingleCall);
Console.BufferHeight = 30000;
MonitorClass.OnRecordInfoEvent += new MonitorClass.RecordInfoHandler(MonitorClass_OnRecordInfoEvent);
Console.WriteLine("Press Enter to exit.");
Console.ReadLine();
}
static void MonitorClass_OnRecordInfoEvent(string msg, string requestType)
{
switch (requestType)
{
case "POST":
Console.ForegroundColor = ConsoleColor.Yellow;
Console.WriteLine(msg);
break;
case "GET":
Console.ForegroundColor = ConsoleColor.DarkGreen;
Console.WriteLine(msg);
break;
default:
Console.ForegroundColor = ConsoleColor.Cyan;
Console.WriteLine(msg);
break;
}
}
}
}
namespace HouseProgram.RemotingServer
{
class Program
{
static void Main(string[] args)
{
TcpServerChannel channel = new TcpServerChannel(8085);
ChannelServices.RegisterChannel(channel, false);
RemotingConfiguration.RegisterWellKnownServiceType(typeof(MonitorClass), "HouseProgramMonitor", WellKnownObjectMode.SingleCall);
Console.BufferHeight = 30000;
MonitorClass.OnRecordInfoEvent += new MonitorClass.RecordInfoHandler(MonitorClass_OnRecordInfoEvent);
Console.WriteLine("Press Enter to exit.");
Console.ReadLine();
}
static void MonitorClass_OnRecordInfoEvent(string msg, string requestType)
{
switch (requestType)
{
case "POST":
Console.ForegroundColor = ConsoleColor.Yellow;
Console.WriteLine(msg);
break;
case "GET":
Console.ForegroundColor = ConsoleColor.DarkGreen;
Console.WriteLine(msg);
break;
default:
Console.ForegroundColor = ConsoleColor.Cyan;
Console.WriteLine(msg);
break;
}
}
}
}