我有一个作为ISAPI过滤器实现的应用程序,它的行为需要根据它是由ISA还是IIS加载而改变。在GetFilterVersion期间,如果是由ISA加载的,则需要向SF_NOTIFY_SEND_RAW_DATA注册;如果是由IIS加载的,则需要向SF_NOTIFY_SEND_RESPONSE注册。
似乎没有任何关于传递给GetFilterVersion的服务器的信息。是否有一些技巧可以识别和区分IIS和ISA?
编辑
在GetFilterVersion调用期间,应用程序需要知道哪个服务器在初始化时加载它。没有当前请求,因此尝试从header变量获取SERVER_VARIABLE将不起作用;此时没有header变量。
为了详细说明,我的应用程序设置了响应头,比如cookies和缓存控制头。当在ISA服务器的上下文中运行时,它必须使用SF_NOTIFY_SEND_RAW_DATA事件来完成此操作,修改ISA代理发送的原始数据。但是,在IIS中,使用此通知会带来严重的性能损失,因此应用程序应该使用SF_NOTIFY_SEND_RESPONSE。SF_NOTIFY_SEND_RESPONSE将不会与ISA一起工作,因为此事件不会为代理响应触发,只会为源自ISA本身的响应触发,例如错误页。最后,注册事件在GetFilterVersion()期间只发生一次,一旦加载过滤器就不能修改。
因此,应用程序需要知道,在初始化期间,它何时决定注册SF_NOTIFY_SEND_RESPONSE或SF_NOTIFY_SEND_RAW_DATA,它是由IIS还是ISA加载的。