|ISAPI Filter Debugging System|
Debugging of ISAPI Filters with the ease of debugging desktop applications.
No need to restart IIS every time you make a change.
No special configuration of IIS, painless setup.
High speed design to allow heavy load testing.
ISAPI Filter Host
What is it?
The ISAPI Host is a host EXE for your ISAPI Filter. This host allows you to debug your ISAPI filter as if you were debugging a regular desktop application.
How it works.
The Filter Debugging System is made of 2 parts. The Filter Host EXE application that loads your ISAPI Filter, and another Filter DLL that is loaded by IIS. The Filter DLL (FilterBase.dll) is loaded by IIS and all calls from IIS are transmitted to the Filter Host EXE (FilterRun.exe), then the FilterRun.exe calls your loaded Filter (say MyFilter.dll). MyFilter.dll can then make its regular calls to "IIS", and these calls are transmitted back to IIS and are handled BY IIS and the the results are transmitted back to MyFilter.dll. This process is transparent to MyFilter.dll and the total round trip cost is typically 0.1ms.
1. Easy debugging of ISAPI Filters!!
2. That the debugging system respond exactly as IIS.
3. That the performance is high enough to debug those filters that only have problems under heavy load.
The behaviour is accomplished by transmitting all calls to IIS and not handling them through any cache system or attempting to handle them in the FilterRun.exe. The only exception is the AllocMem function. This is handled by the FilterRun.exe application, and its behaviour is programmed to follow what is specified in the IIS SDK.
The performance is accomplished by using local named pipes, sharing connections, and by preparing connections ahead of time. Under regular "hits" a set number of connections will be established and they will remain connected and reused for all calls from IIS. When there is high volume, new connections will be made. To make new connections fast, the FilterRun.exe maintains 3 threads ahead of what is currently used. A typical round trip costs 0.1ms.