Я размещал веб-приложение в IIS7. С помощью сервера я могу программно отслеживать количество запросов и запросов от клиента.Можно ли программно отслеживать весь запрос от клиента на сервер в C#
Пожалуйста, советы
Я размещал веб-приложение в IIS7. С помощью сервера я могу программно отслеживать количество запросов и запросов от клиента.Можно ли программно отслеживать весь запрос от клиента на сервер в C#
Пожалуйста, советы
В приложении вы можете реализовать Application_BeginRequest() (в global.asax)
Внутри этой функции вы можете использовать объект запроса, и вы, вероятно, заинтересованы в Request.Path, запрос. RawUrl, Request.UserHostAddress, Request.InputStream, Request.Form.AllKeys.
Это полезно, но я не могу изменить любую часть размещенного приложения. Поэтому я ищу программно как отдельное приложение. – ganesh
Было бы лучше, если бы вы предоставили более подробную информацию о том, что вы будете делать с данными, например, если целью является получение аналитики, тогда я бы настоятельно рекомендовал вместо этого использовать Google Analytics или другие подобные продукты (AppInsights , WebTrends или другие).
Сказав, что вы можете, конечно, что без изменения приложения, вы можете написать управляемый модуль кода, который вы регистрируетесь на сервере через конфигурацию, реализующий IHttpModule, что-то вроде:
public class TrackingModule : IHttpModule
{
public void Dispose()
{
}
public void Init(HttpApplication context)
{
context.BeginRequest += OnBeginRequest;
}
void OnBeginRequest(object sender, EventArgs e)
{
HttpApplication app = (HttpApplication)sender;
HttpRequest request = app.Context.Request;
if (request == null)
{
return;
}
string url = request.RawUrl;
string userAddress = request.UserHostAddress;
DateTime time = DateTime.UtcNow;
string userAgent = request.UserAgent;
// Store somewhere the data...
}
}
Долгое время назад, я дал несколько бесед о том, как расширить IIS и написал провайдер протоколов SQL, который может дать вам некоторый контекст. Для этого используется событие LogRequest, которое подходит именно для этого. Вам просто нужно настроить его в ApplicationHost.config или корневой web.config и вам не нужно будет изменить что-либо в приложении, и вы получите все, что:
#define TRACE
using System;
using System.Web;
using System.Data.SqlClient;
using System.Web.Hosting;
public class SqlLoggingModule : IHttpModule {
public void Dispose() {
}
public void Init(HttpApplication context) {
context.LogRequest += new EventHandler(OnLogRequest);
}
void OnLogRequest(object sender, EventArgs e) {
HttpApplication app = (HttpApplication)sender;
try {
Log(app.Context);
}
catch (Exception ex) {
System.Diagnostics.Trace.TraceError(ex.ToString());
app.Context.Trace.Warn(ex.ToString());
}
}
private void Log(HttpContext ctx) {
string connectionString = @"server=(local);database=TechEd;uid=youruser;password=yourpassword;";
// Disable Kernel Cache
ctx.Response.DisableKernelCache();
using (SqlConnection connection = new SqlConnection(connectionString)) {
SqlCommand cmd = connection.CreateCommand();
cmd.CommandText =
"insert into Log (Date, Method, IPAddress, Url, UserName, UserAgent, ResponseCode, SiteName, ApplicationName) values" +
"(@Date, @Method, @IPAddress, @Url, @UserName, @UserAgent, @ResponseCode, @SiteName, @ApplicationName)";
cmd.Parameters.AddWithValue("@Date", DateTime.Now);
cmd.Parameters.AddWithValue("@Method", ctx.Request.HttpMethod);
cmd.Parameters.AddWithValue("@IPAddress", ctx.Request.UserHostAddress);
cmd.Parameters.AddWithValue("@Url", ctx.Request.Url.ToString());
cmd.Parameters.AddWithValue("@UserName", ctx.Request.ServerVariables["LOGON_USER"]);
cmd.Parameters.AddWithValue("@UserAgent", ctx.Request.UserAgent);
cmd.Parameters.AddWithValue("@ResponseCode", ctx.Response.StatusCode + "." + ctx.Response.SubStatusCode);
cmd.Parameters.AddWithValue("@SiteName", HostingEnvironment.SiteName);
cmd.Parameters.AddWithValue("@ApplicationName", ctx.Request.ApplicationPath);
connection.Open();
cmd.ExecuteNonQuery();
}
}
}
В самом IIS мы можем отслеживать номер функции request.buit в функциональности – user3572575
Вы видели регистрацию IIS https://technet.microsoft.com/en-us/library/cc732079(v=ws.10).aspx? Вам нужно больше, чем это? Если да, то что именно? – Polyfun
Мне нужно больше ... нужно получить URL-адрес от клиента, параметры, если таковые имеются, время, количество уникальных URL-адресов. мы можем анализировать некоторые вещи из этих данных. – ganesh