注意:
1. 需要在GetFilterVersion中手工添加你所感兴趣的事件,事件发生时IIS才会通知filter,然后你才能在相关的事件处理函数中进行操作
pVer->dwFlags |= SF_NOTIFY_SECURE_PORT | SF_NOTIFY_NONSECURE_PORT | SF_NOTIFY_PREPROC_HEADERS;
2. GetHeader和SetHeader时注意部分头是需要冒号
char *pHeader = new char[BUF_SIZE + 1];
std::auto_ptr<char> pcHeader(pHeader);
DWORD dwBufSize = BUF_SIZE;
pcHeader[0]=0;
pHeaders->GetHeader(pfc->m_pFC, “User-Agent:”, pcHeader, &dwBufSize);
pHeaders->SetHeader(pfc->m_pFC, "Accept-Encoding:", "gzip");
头“URL”是没有冒号的
3.设置COOKIE
pFC->AddResponseHeaders(pFC, "Set-Cookie: Cookie1=Value1; path=/;/r/n",0);
(持久COOKIE):
pFC->AddResponseHeaders(pFC,"Set-Cookie: Cookie1=Value1;
expires=Fri 22-May-1998 13:00:00 GMT; path=/;/r/n", 0);
4.获取URL
std::auto_ptr<char> pcHeaderWrap(pcHeader);
pHeaders->GetHeader(pfc->m_pFC, "URL", pcHeader, &dwBufSize);
CString url = pcHeader;
url.Trim().MakeLower();
if (url.Find(m_restartUrl) == 0)
{
直接返回:
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/0196c3df5ea9e936f21e9932cca91014.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
//增加后续操作:
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/717446ca04a6125dc5b6b54e0fa14ab4.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/0196c3df5ea9e936f21e9932cca91014.gif)
遗留问题:
log4cpp在Fiter中无法正常工作!相同的代码编译成LIB,放到测试类中可以工作,但是放到FILTER中,在初始化appender时,总是在获取lock直接退出当前堆栈,连异常都没有
void Appender::_addAppender(Appender* appender) {
threading::ScopedLock lock(_appenderMapMutex);// 进入临界区失败EnterCriticalSection(_criticalSection);
_getAllAppenders()[appender->getName()] = appender;
}
------------------------------------------------
根据断点跟踪发现,Appender的静态变量_appenderMapMutex在被使用时其构造函数竟然没有调用??
(给其增加成员,并在构造函数中初始化成员,结果那些测试的成员并没有初始化);后来增加了自定义的静态成员也没有初始化?
同时,在filter模块中的一切静态成员工作正常。SO 迷了!!!!
相关代码如下,一切正常:
定义 static threading::Mutex _appenderMapMutex; //Appender.hh
初始化和使用//Appender.cpp
namespace log4cpp {
threading::Mutex Appender::_appenderMapMutex; //初始化
void Appender::_addAppender(Appender* appender) {
threading::ScopedLock lock(_appenderMapMutex);
_getAllAppenders()[appender->getName()] = appender;
}