IIS ISAPI Filter 开发

本文分享了IISISAPIFilter开发过程中的经验教训,重点介绍了如何解决读取配置文件导致的应用程序池自动停止问题及高CPU占用问题。通过合理使用临界区来保护共享资源,实现了稳定高效的数据访问。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

IIS ISAPI Filter 开发
Filter的开发,最快的方式当然是参考MSDN的资料,毕竟是Microsoft的东西,还是看他自家的资料比较稳妥。
在这个目录中,能够找到Microsoft对IIS开发的详细说明和例子。
Web Development
    Internet Information Services(IIS)
地址:http://msdn2.microsoft.com/en-us/library/aa737439.aspx
当然,网上还有一些朋友给出了详细的操作步骤,可以参考。

在开发中一直困扰的问题是:读取配置文件的问题。当把读文件放在Filter的构造函数中时,经过一段正常运行后,
总是引起应用程序池的自动停止,并且检查系统日志,会发现报告Filter产生错误被停止。当把读文件放在Filter的
OnXXXX函数中时,虽然不会发生应用程序池的停止,但是IIS运行进程耗费了很大的CPU资源。
经过一番Google,发现一直忽视了临界区的问题。
参考这个页面中的源码,修改了自己的代码。终于测试通过。
地址:http://www.codeproject.com/KB/ISAPI/authfilter.aspx
最终的解决办法是,把读文件放在GetFilterVersion函数中,把读出记录放到一个数组中,
然后,把程序中访问这个数组的部分全都置于临界区内。
需要用到以下临界区操作代码:
1.声明一个临界区
static CRITICAL_SECTION m_csCacheLock;
2.进入临界区
EnterCriticalSection( &m_csCacheLock );
3.离开临界区
LeaveCriticalSection( &m_csCacheLock );
4.消除临界区
DeleteCriticalSection( &m_csCacheLock );

总结一下,开发一个IIS ISAPI Filter 需要具备的知识,
C++语言
MFC库
Visual Studio开发环境
Windows server操作系统管理
特别的还需要了解:
类的静态成员变量,静态成员函数
多线程处理
DLL原理

今天看到了这个 http://msdn.microsoft.com/library/chs/default.asp?url=/library/CHS/vccore/html/_core_how_does_isapi_compare_with_cgi.3f.asp
   MSDN Home >  Visual Studio .NET >  Visual C++ >  添加功能 >  Visual C++ 库 >  MFC >  MFC Internet 编程 >  MFC Internet 编程基础 >  Internet 编程常见问题>有哪些内存和资源注意事项?
其中有:
ISAPI DLL 支持多个同时请求,确保临界数据受到保护是 ISAPI DLL 开发人员的责任。
原来微软也想到了呀。。。
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值