ISAPI Extension MFC and C

ISAPI Extension
1.使用MFC的
1.1使用VS2003,建MFC Extension Dll项目
1.2修改MessageMap
BEGIN_PARSE_MAP(CMyConfigExtension, CHttpServer)
 // TODO: insert your ON_PARSE_COMMAND() and
 // ON_PARSE_COMMAND_PARAMS() here to hook up your commands.
 // For example:

 ON_PARSE_COMMAND(Default, CMyConfigExtension, ITS_EMPTY)
 ON_PARSE_COMMAND(LoadXml, CMyConfigExtension, ITS_EMPTY)
 ON_PARSE_COMMAND(LoadXml2, CMyConfigExtension, ITS_EMPTY)
 ON_PARSE_COMMAND(LoadXml3, CMyConfigExtension, ITS_EMPTY)
 DEFAULT_PARSE_COMMAND(Default, CMyConfigExtension)
END_PARSE_MAP(CMyConfigExtension)
1.3实现方法
void CMyConfigExtension::LoadXml(CHttpServerContext* pCtxt)
{
 HRESULT hr;
 CoInitialize(NULL);
 //MSXML2::IXMLDocument2Ptr spXMLDOM;
 CComPtr<IXMLDOMDocument> spXMLDOM;  
 hr = spXMLDOM.CoCreateInstance(__uuidof(DOMDocument));
 if ( FAILED(hr) ) throw "f";  
 if ( spXMLDOM.p == NULL ) throw "f0";  
 VARIANT_BOOL bSuccess = false;  
 hr = spXMLDOM->load(CComVariant(L"c://my//config//ClusterConfig.xml"),&bSuccess);  

 if ( FAILED(hr) )
  throw "f1";  
 if ( !bSuccess )
  throw "f2";  
 StartContent(pCtxt);
 WriteTitle(pCtxt);

 *pCtxt << _T("This default message was produced by the Internet");
 *pCtxt << _T(" Server DLL Wizard. Edit your CMyConfigExtension::Default()");
 *pCtxt << _T(" implementation to change it./r/n");

 EndContent(pCtxt);
 CoUninitialize();
}

void CMyConfigExtension::LoadXml2(CHttpServerContext* pCtxt)
{
 MSXML2::IXMLDOMDocument2Ptr spDocument;
 spDocument.CreateInstance(__uuidof(MSXML2::FreeThreadedDOMDocument));

 // Load the file
 VARIANT_BOOL fLoaded = spDocument->load("c://my//config/clusterconfig.xml");

 StartContent(pCtxt);
 WriteTitle(pCtxt);

 *pCtxt << _T("This default message was produced by the Internet");
 *pCtxt << _T(" Server DLL Wizard. Edit your CMyConfigExtension::Default()");
 *pCtxt << _T(" implementation to change it./r/n");

 EndContent(pCtxt);
}
ISAPI扩展到这里编程就已经实现了,执行使用http://localhost/name.dll?LoadXml
需要执行也还有一些配置要做,把Dll copy到指定目录,然后要确保该dll可以被允许执行
 因为使用了MSXML2的com,所以在前面要加上#import <msxml3.dll>
方法解释:
void CMyConfigExtension::LoadXml(CHttpServerContext* pCtxt)
这里使用的是标准的com初始化方法
void CMyConfigExtension::LoadXml2(CHttpServerContext* pCtxt)
这里使用的是Smart Pointer,所以不需要显式的初始化

2.使用C的
#define WIN32_LEAN_AND_MEAN    // 从 Windows 头中排除极少使用的资料
#include <httpext.h>
#include <stdio.h>

extern "C" DWORD WINAPI HttpExtensionProc(LPEXTENSION_CONTROL_BLOCK pECB)
{
  DWORD dwBytes;
  char HeaderBuff[256];

  LPSTR BodyBuff="<html><head></head><body>Hello World</body></html>";
  sprintf(HeaderBuff,"Content-Type: text/html/r/nContent-Length: %d/r/n/r/n",strlen(BodyBuff));
  dwBytes = strlen(HeaderBuff);

  pECB->ServerSupportFunction(pECB->ConnID,HSE_REQ_SEND_RESPONSE_HEADER,NULL,&dwBytes,(LPDWORD)HeaderBuff);
  dwBytes = strlen(BodyBuff);
  pECB->WriteClient(pECB->ConnID,(LPVOID)BodyBuff,&dwBytes,0);

  return HSE_STATUS_SUCCESS;
}

extern "C" BOOL WINAPI GetExtensionVersion(HSE_VERSION_INFO* pVer)
{
  return TRUE;
}

extern "C" BOOL WINAPI TerminateExtension(DWORD dwFlags)
{
  return TRUE;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值