利用HttpModule做流量记录

时间:2010-02-24 15:02:08  来源:第二电脑网  作者:第二电脑网

  第二电脑网导读:n Han、北极熊,我来了!、nasa、雪溯馨风的支持。      利用HttpModule做流量记录的方案已经提出来了,而且也已经决定项目采用这个方案,所以,就算是N多的不好,也还是需要完善一下。下面,我就画蛇添足吧!      方案的瓶颈:   1、加载入了Web请求,给处理增加负担。   2、每次请求...
  正文:《利用HttpModule做流量记录》和《利用HttpModule做流量记录 补充》除了得到大家的建议外也饱受非议。在这里要谢谢 kiler 、zoti、武眉博<活靶子.NET>、大石头、古巴、yoshow、ekinwt
  、Jeffrey Zhao、slightboy的建议,感谢一下Colin Han、北极熊,我来了!、nasa、雪溯馨风的支持。
  
  利用HttpModule做流量记录的方案已经提出来了,而且也已经决定项目采用这个方案,所以,就算是N多的不好,也还是需要完善一下。下面,我就画蛇添足吧!
  
  方案的瓶颈:
  1、加载入了Web请求,给处理增加负担。
  2、每次请求页面都会产生巨大的记录数据。保存记录数据时整体性能的损耗。
  3、由于流量记录HttpModule异常引发网站请求异常存在危险性。
  
  方案的优势:
  1、最大程度保护记录准确性。用户信息基于Session中获取。
  2、无需往实际页面中增加任何代码。也无需让所有页面继承任何一个基类。保持网站业务逻辑代码和统计代码分离。
  3、可以记录WebService请求(必须开启服务方法Session才能获取保存在Session中的信息)。
  
  我采用降低瓶颈的解决方案
  1、数据记录。
  最终采用记录入Sql2005数据库,利用异步处理完成并启用连接池。
  CS代码——————————————————————————————————————————————————
   /// <summary>
   /// 记录流量信息
   /// </summary>
   /// <param name="flowEntity">流量记录实体</param>
   public void Record(FlowEntity flowEntity)
   {
   //判断连接是否为打开状态
   if (_conn.State != ConnectionState.Open)
   _conn.Open();
  
   string strCommand = "记录语句";
   SqlCommand dbcommand = new SqlCommand(strCommand, _conn);
   dbcommand.CommandType = CommandType.Text;
  
   dbcommand.Parameters.Add(添加记录需要的参数);
  
  
   try
   {
   dbcommand.BeginExecuteNonQuery(new AsyncCallback(dbcommandCallBack), dbcommand);
  
   }
   catch
   {
   }
  
   }
  
   public void dbcommandCallBack(IAsyncResult result)
   {
   try
   {
   SqlCommand dbcommand = (SqlCommand)result.AsyncState;
   dbcommand.EndExecuteNonQuery(result);
   }
   catch
   {
  
   }
   }
  web.config 连接字符串——————————————————————————————————————————
  <add name="FoutorWebSiteFlowStatisticsDatabaseConnectionString"
   connectionString="Data Source=YourServer;Initial Catalog=FoutorWebSiteFlowStatisticsDatabase;Integrated Security=True;Asynchronous
  
  Processing=true;Pooling=true;MultipleActiveResultSets=true;"
   providerName="System.Data.SqlClient" />
  注意必须用:Asynchronous Processing=true;MultipleActiveResultSets=true;声明
  
  关于ADO.net异步处理和Http异步处理可以参考下面的文章
  通过 ASP/ target=_blank class=infotextkey>asp.NET 异步编程实现可扩展的应用程序 http://msdn.microsoft.com/msdnmag/issues/07/03/WickedCode/Default.aspx?loc=zh#void
  执行异步操作 http://msdn2.microsoft.com/zh-cn/library/zw97wx20(VS.80).aspx
  ADO.NET 2.0中的异步命令执行 http://blog.csdn.net/Aaron_Xie/archive/2007/07/20/1700510.aspx
  ADO.NET的新功能:MARS(Multiple Active Result Set) 及 异步执行命令 http://www.cnblogs.com/doll-net/archive/2007/07/23/828043.html

"利用HttpModule做流量记录"由第二电脑网原创提供,转载请注明:http://www.002pc.com/master/College/Programming/aspnet/12895.html


关键字:

关于《利用HttpModule做流量记录》文章的评论

站内搜索: 高级搜索

热门搜索: Windows style 系统 tr IP QQ CPU 安装 function 注册 if td