|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
问题是他们究竟是喜欢他们是使用软件时,速度快还是速度慢好.(当然在3秒以内).无论是他们输入资料时,查找资料时,分析资料时.作为一个WWW服务器软件,微软公司的InternetInfomationServer(IIS)复杂易学,办理便利,失掉了普遍的利用。您还能够经由过程ISAPI过滤器,举行本人定制的处置,来加强IIS的功效。ISAPI过滤器能够定制以下的处置:吸收HTTP协定头预处置、发送HTTP协定头预处置、发送生数据预处置、取得生数据预处置、HTTP会话停止信息处置、自界说的平安认证机制、URL映照信息处置、日记纪录处置等。天真使用这些定制处置,您能够完成很多看似难以完成的功效,失掉意想不到的效果。可是ISAPI过滤器利用不妥也会影响服务器的功能。
ISAPI过滤器的开辟十分复杂,只必要完成三个接口DLL函数便可。它们是GetFilterVersion()、HttpFilterProc()、TerminateFilter(),人人能够检察MSDN懂得具体的用法。ISAPI过滤器是DLL文件,一样平常用C/C++言语开辟。为使ISAPI过滤器可以运转,您必要在注册表的HKEY_LOCAL_MACHINESystemCurrentControlSet
ServicesW3SVCParameters下创建一个字符串项,其称号为"FilterDlls",值为ISAPI过滤器文件的全路径称号。若这个字符串项已存在,只需把它的全路径称号到场个中,分歧的ISAPI过滤器文件之间用";"分开,您能够依据实行的优先按次加在得当的地位。设置好后从头启动IIS服务,您的ISAPI过滤器就发扬感化了。
上面作者举一个详细的使用例子。
对会见内容举行统计剖析:
一般我们在必要计数的页面内放一个计数器,大概利用ASP文件来完成计数功效。这类办法不克不及合用于如README.TXT等其他非HTML格局的文件。假如利用IIS的日记功效又太占用空间而不便利。作者经由过程定制URL映照信息处置来跟踪感乐趣的几个文件的计数统计,将了局纪录在一个文件中。
上面是它的源程序。
fcount.def:
LIBRARYfcount
EXPORTSGetFilterVersion
HttpFilterProc
TerminateFilter
fcount.c:
#include<stdio.h>
#include<string.h>
#include<windows.h>
#include<httpfilt.h>
#definelogfile"C:InetPubfcount.log"
#definepages5
char*urls[]={
"/default.htm",
"/banner.gif",
"/product/readme.txt",
"/product/product1.htm",
"/product/product2.htm"
};
intcounts[pages];
BOOLWINAPIGetFilterVersion
(HTTP_FILTER_VERSION*pVer)
{
inti;
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);
}
returnTRUE;
}
DWORDWINAPIHttpFilterProc
(HTTP_FILTER_CONTEXT*pfc,
DWORDnoteType,VOID*pvNote)
{
inti;
charlurl[512];
charbuf[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;
}
}
returnSF_STATUS_REQ_NEXT_NOTIFICATION;
}
BOOLWINAPITerminateFilter(DWORDdwFlags)
{
inti;
charbuf[16];
for(i=0;i<pages;i++){
/*体系中断时将计数值写进文件*/
_itoa(counts[i],buf,10);
WritePrivateProfileString("VisitCounter",
urls[i],buf,logfile);
}
returnTRUE;
}
以上二个例子作者利用VC6.0编译,在WINNT2000+SP3和IIS5.0上调试经由过程。
无法实现跨操作系统的应用。当然这也是微软的理由之一,只有这样才能发挥ASP最佳的能力。可是我却认为正是Windows限制了ASP,ASP的概念本就是为一个能让系统运行于一个大的多样化环境而设计的; |
|