高分寻找 ISAPI/NSAPI 源代码,相关网址..... 初学ISAPI, 请帮找些实例 (源代码或网站, 就算是环境变量探针也行啊),俺先谢谢啦!! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 http://www.codeguru.com/isapi/index.shtml http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnmag01/html/Sentry.asp ISAPI就是编写一个DLL程序,该程序要实现三个输出函数:1、GetExtensionVersion 开始2、TerminateExtension 结束3、HttpExtensionProc 处理请求过程 url: http://xxx.xxx.com/dll/isapi.dll?ACTION=AAAA IIS就会装载你的DLL,将参数传给你,让你来处理 你可以连接数据库等等,将动态生成的或静态的html回传给客户端以下是个例子: 首先取了一些变量 然后执行了一个DBLIB的SQL查询,动态生成了网页,返回给客户端 调试时可以把sql哪段去掉 int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void*){ return 1;}BOOL __declspec(dllexport) WINAPI GetExtensionVersion( HSE_VERSION_INFO *pVer ){ pVer->dwExtensionVersion=0x00010000; //MAKELONG(HSE_VERSION_MAJOR,HSE_VERSION_MINOR); strcpy(pVer->lpszExtensionDesc,"Example ISAPI extension"); return TRUE;}DWORD __declspec(dllexport) WINAPI HttpExtensionProc( EXTENSION_CONTROL_BLOCK *pECB ){ char *p; DWORD len; char s[1024],var[256]; long zh; SQLCLIENT sql; strcpy(pECB->lpszLogData,"C++ Builder ISAPI DLL"); pECB->dwHttpStatusCode=200; p="HTTP/1.0 200 OK/r/nContext-Type:text/html/r/n"; len=strlen(p); (*pECB->ServerSupportFunction)(pECB->ConnID,HSE_REQ_SEND_RESPONSE_HEADER,p,&len,NULL); strcpy(s,"<HTML><TITLE>Test server result</TITLE><H1>Test server results</H1><BODY>Hello from ISAPI<BR>"); len=sizeof(var); (*pECB->GetServerVariable)(pECB->ConnID,"REMOTE_ADDR",var,&len); sprintf(s+strlen(s),"Remote IP:%s<BR>",var); len=sizeof(var); (*pECB->GetServerVariable)(pECB->ConnID,"REQUEST_METHOD",var,&len); sprintf(s+strlen(s),"request method:%s<BR>",var); len=sizeof(var); (*pECB->GetServerVariable)(pECB->ConnID,"QUERY_STRING",var,&len); sprintf(s+strlen(s),"query string:%s<BR>",var); zh=atol(var); len=sizeof(var); (*pECB->GetServerVariable)(pECB->ConnID,"SERVER_SOFTWARE",var,&len); sprintf(s+strlen(s),"server software:%s<BR>",var); len=sizeof(var); (*pECB->GetServerVariable)(pECB->ConnID,"URL",var,&len); sprintf(s+strlen(s),"request URL:%s<BR>",var); if (sql.Init()==0) strcat(s,"Init SQL Fail!<BR>"); else { if (sql.Login("TEST","MS SQL SERVER","username","password")==0) strcat(s,"Login SQL Fail!<BR>"); else { sql.Clear(); sql.Use("SWTrade"); sprintf(var,"select name from tablename where user=%ld",zh); sql.SQL(var); if ((sql.ExecSQL())&&(!sql.SQLEOF)) { sql.NameAsString("name",var,10); var[10]=0; } else strcpy(var,"帐号不存在!"); sprintf(s+strlen(s),"帐号%ld的姓名是:%s<BR>",zh,var); sql.Cancel(); } sql.Close(); } strcat(s,"</BODY></HTML>"); len=strlen(s); (*pECB->WriteClient)(pECB->ConnID,s,&len,0); return HSE_STATUS_SUCCESS;}BOOL __declspec(dllexport) WINAPI TerminateExtension( DWORD dwFlags ){ return TRUE;} dll不能导出静态模板对象吗? 服务器端写入数据库太慢怎么办? 如果界面隐藏,调用DC.GetPixel,能否取到正确的颜色值? 这个问题搞了好久没搞定? 鼠标钩子程序可以用但调试死机(100分) vc.net 对象点操作符后面无法显示方法/属性。 关于数据库crecordset的问题??? Win2000域的问题 关于内存的问题 关于线程不能正常退出的原因分析 怎么知道cedit中的在n位的字符处于那一行? 用c编的程序怎么调用dll(也是c编的)文件?
1、GetExtensionVersion 开始
2、TerminateExtension 结束
3、HttpExtensionProc 处理请求过程
url: http://xxx.xxx.com/dll/isapi.dll?ACTION=AAAA
IIS就会装载你的DLL,将参数传给你,让你来处理
你可以连接数据库等等,将动态生成的或静态的html回传给客户端以下是个例子:
首先取了一些变量
然后执行了一个DBLIB的SQL查询,动态生成了网页,返回给客户端
调试时可以把sql哪段去掉
int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void*)
{ return 1;
}BOOL __declspec(dllexport) WINAPI GetExtensionVersion( HSE_VERSION_INFO *pVer )
{ pVer->dwExtensionVersion=0x00010000; //MAKELONG(HSE_VERSION_MAJOR,HSE_VERSION_MINOR);
strcpy(pVer->lpszExtensionDesc,"Example ISAPI extension");
return TRUE;
}DWORD __declspec(dllexport) WINAPI HttpExtensionProc( EXTENSION_CONTROL_BLOCK *pECB )
{ char *p;
DWORD len;
char s[1024],var[256];
long zh;
SQLCLIENT sql;
strcpy(pECB->lpszLogData,"C++ Builder ISAPI DLL");
pECB->dwHttpStatusCode=200;
p="HTTP/1.0 200 OK/r/nContext-Type:text/html/r/n";
len=strlen(p);
(*pECB->ServerSupportFunction)(pECB->ConnID,HSE_REQ_SEND_RESPONSE_HEADER,p,&len,NULL);
strcpy(s,"<HTML><TITLE>Test server result</TITLE><H1>Test server results</H1><BODY>Hello from ISAPI<BR>");
len=sizeof(var);
(*pECB->GetServerVariable)(pECB->ConnID,"REMOTE_ADDR",var,&len);
sprintf(s+strlen(s),"Remote IP:%s<BR>",var);
len=sizeof(var);
(*pECB->GetServerVariable)(pECB->ConnID,"REQUEST_METHOD",var,&len);
sprintf(s+strlen(s),"request method:%s<BR>",var);
len=sizeof(var);
(*pECB->GetServerVariable)(pECB->ConnID,"QUERY_STRING",var,&len);
sprintf(s+strlen(s),"query string:%s<BR>",var);
zh=atol(var);
len=sizeof(var);
(*pECB->GetServerVariable)(pECB->ConnID,"SERVER_SOFTWARE",var,&len);
sprintf(s+strlen(s),"server software:%s<BR>",var);
len=sizeof(var);
(*pECB->GetServerVariable)(pECB->ConnID,"URL",var,&len);
sprintf(s+strlen(s),"request URL:%s<BR>",var);
if (sql.Init()==0) strcat(s,"Init SQL Fail!<BR>");
else
{ if (sql.Login("TEST","MS SQL SERVER","username","password")==0) strcat(s,"Login SQL Fail!<BR>");
else
{ sql.Clear();
sql.Use("SWTrade");
sprintf(var,"select name from tablename where user=%ld",zh);
sql.SQL(var);
if ((sql.ExecSQL())&&(!sql.SQLEOF))
{ sql.NameAsString("name",var,10);
var[10]=0;
}
else strcpy(var,"帐号不存在!");
sprintf(s+strlen(s),"帐号%ld的姓名是:%s<BR>",zh,var);
sql.Cancel();
}
sql.Close();
}
strcat(s,"</BODY></HTML>");
len=strlen(s);
(*pECB->WriteClient)(pECB->ConnID,s,&len,0);
return HSE_STATUS_SUCCESS;
}BOOL __declspec(dllexport) WINAPI TerminateExtension( DWORD dwFlags )
{
return TRUE;
}