初学ISAPI, 请帮找些实例 (源代码或网站, 就算是环境变量探针也行啊),俺先谢谢啦!!

解决方案 »

  1.   

    http://www.codeguru.com/isapi/index.shtml
      

  2.   

    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnmag01/html/Sentry.asp
      

  3.   

    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;
    }