首 页 | 精品电影 | 音乐天堂 | 在线游戏 | Flash MTV | 三湘书屋 | 幽默笑话 | 三湘图库 | 美女写真 | IT知识库 | QQ贴图 | 加入书签

网页制作网络编程图形图象操作系统冲浪宝典软件教学网络安全认证考试通信技术电子商务业内动态书籍教程原码

最近更新 文章分类 多媒体类 精品软件

本站搜索:
您的位置:三湘时空 -> IT知识库 -> 文章分类 -> ASP技巧 -> 使用ISAPI过滤器增强IIS的功能  
使用ISAPI过滤器增强IIS的功能


文章类别:ASP技巧 来源: 作者: 发表日期:2005-10-4 字体:[ ]

小游戏 | 在线影院 | 幽默笑话 | 源码下载 | Flash MTV | 音乐试听 | 书屋 | 美女写真

作为一个WWW服务器软件,微软公司的Internet Infomation Server(IIS)简单易学,管理方便,得到了广泛的使用。您还可以通过ISAPI过滤器,进行自己定制的处理,来增强IIS的功能。ISAPI过滤器可以定制以下的处理:接收HTTP协议头预处理、发送HTTP协议头预处理、发送生数据预处理、获得生数据预处理、HTTP会话结束信息处理、自定义的安全认证机制、URL映射信息处理、日志记录处理等。灵活利用这些定制处理,您可以完成许多看似难以实现的功能,得到意想不到的效果。但是ISAPI过滤器使用不当也会影响服务器的性能。


ISAPI过滤器的开发非常简单,只需要完成三个接口DLL函数即可。它们是GetFilterVersion()、HttpFilterProc()、TerminateFilter(),大家可以查看MSDN了解详细的用法。ISAPI过滤器是DLL文件,一般用C/C++语言开发。为使ISAPI过滤器能够运行,您需要在注册表的HKEY_LOCAL_MACHINE\System\CurrentControlSet\
Services\W3SVC\Parameters下建立一个字符串项,其名称为"Filter Dlls",值为ISAPI过滤器文件的全路径名称。若这个字符串项已经存在,只需把它的全路径名称加入其中,不同的ISAPI过滤器文件之间用";"分隔,您可以根据执行的优先顺序加在适当的位置。设置好后重新启动IIS服务,您的ISAPI过滤器就发挥作用了。

下面作者举一个具体的应用例子。

对访问内容进行统计分析:
通常我们在需要计数的页面内放一个计数器,或者使用ASP文件来实现计数功能。这种方法不能适用于如README.TXT等其他非HTML格式的文件。如果使用IIS的日志功能又太占用空间而不方便。作者通过定制URL映射信息处理来跟踪感兴趣的几个文件的计数统计,将结果记录在一个文件中。

下面是它的源程序。

fcount.def:
LIBRARY fcount
EXPORTS GetFilterVersion
 HttpFilterProc
 TerminateFilter

fcount.c:
#include <stdio.h>
#include <string.h>
#include <windows.h>
#include <httpfilt.h>

#define logfile "C:\\InetPub\\fcount.log"
#define pages 5
char* urls[] = {
  "/default.htm",
  "/banner.gif",
  "/product/readme.txt",
  "/product/product1.htm",
  "/product/product2.htm"
  };
int counts[pages];

BOOL WINAPI GetFilterVersion
(HTTP_FILTER_VERSION *pVer)
{
int i;

 pVer->dwFilterVersion = HTTP_FILTER_REVISION;
strcpy(pVer->lpszFilterDesc, "fcount");
 pVer->dwFlags = SF_NOTIFY_URL_MAP; /* 过滤的内容 */

 for (i=0; i<pages; i++) { /* 从文件读入初始计数值 */
counts[i] = GetPrivateProfileInt("VisitCounter",
urls[i],
0, logfile);
}

 return TRUE;
}

DWORD WINAPI HttpFilterProc
(HTTP_FILTER_CONTEXT *pfc,
 DWORD noteType, VOID *pvNote)
{
 int i;
 char lurl[512];
 char buf[16];

 strcpy(lurl, ((PHTTP_FILTER_URL_MAP)pvNote)
->pszURL);
 _strlwr(lurl);
 for (i=0; i<pages; i++) {
 if (strcmp(lurl, urls[i])==0) {
  counts[i] ++; /* 计数值增加 */
  if (counts[i]%10==0) {
/* 当计数值满10时记入文件,
 以免系统突然死掉时数据全部丢失 */
  _itoa(counts[i], buf, 10);
  WritePrivateProfileString("VisitCounter",
 urls[i], buf, logfile);
  }
  break;
 }
 }
 return SF_STATUS_REQ_NEXT_NOTIFICATION;
}

BOOL WINAPI TerminateFilter(DWORD dwFlags)
{
 int i;
 char buf[16];

 for (i=0; i<pages; i++) {
    /* 系统停止时将计数值写入文件 */
 _itoa(counts[i], buf, 10);
 WritePrivateProfileString("VisitCounter",
 urls[i], buf, logfile);
 }
 return TRUE;
}

以上二个例子作者使用VC 6.0编译,在WINNT2000 + SP3 和 IIS 5.0上调试通过。

上一篇:MVC模式的PHP实现 下一篇:用ASP学做一个在线调查
本栏目热门文章
·WEB打印设置解决方案二(利用ScriptX.cab控件改变IE打印 2005-10-4
·WEB打印设置解决方案三(FileSystem组件实现WEB打印) 2005-10-4
·使用VBScript操作Html复选框(CheckBox)控件 2005-10-4
·automation服务器不能创建对象 2006-1-6
·HTTP_REFERER的工作方式 2005-10-4
·用ASP和Microsoft.XMLDOM分析远程XML文件 2005-10-4
·XMLHTTP Get HTML页面时的中文乱码之完全客户端Scri 2005-10-4
·使用ActiveX控件开发网页常见的问题 2005-10-4
·关于 aspsmartupload 注册问题 2005-10-4
·判断checkbox是否至少有选择一项 2005-10-8
新近更新文章
·ASP网站漏洞解析及黑客入侵防范方法 2006-6-22
·将asp页面转换成htm页面 2006-6-20
·使用JMail组件代替Sql Mail发送Email 遇到的问题 2006-6-15
·Ajax & XMLHttpRequset 2006-6-15
·如何让图片自动缩放以适合界面大小 2006-6-15
·用正则解析图片地址,并利用XMLHTTP组件将其保存 2006-6-15
·用ASP+CSS实现随机背景 2006-6-4
·关于Cookie跨域操作遇到的问题及解决方法 2006-6-4
·编写数据库操作类,使ASP.NET中的数据库操作变得简单 2006-5-22
·一个简单的用存储过程分页 2006-5-18
首 页 | 软件发布 | 广告联系 | 下载帮助 | 意见反馈 | 网站地图
  CopyRight? 2002-2004 WWW.SXSKY.NET? All Rights Reserved
三湘时空 站长QQ:82675303 Email: