扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
BEGIN_REPLACEMENT_METHOD_MAP(CHelloWorld) REPLACEMENT_METHOD_ENTRY("Title", OnTitle) REPLACEMENT_METHOD_ENTRY("HelloWorld", OnHelloWorld) END_REPLACEMENT_METHOD_MAP() |
表 2. HelloWorld.cpp文件中的替代方法映射部分
OnTitle 和 OnHelloWorld方法(与替代方法映射部分包含在同一个文件内)的实现比较简单。它们使用ChttpResponse对象的流操作符将动态内容写入到响应流中,然后发送到客户端。
HTTP_CODE OnTitle() { m_HttpResponse << "HelloWorld Sample"; return http_success; } http_code OnHelloWorld() { m_HttpResponse << "Hello World!"; return HTTP_SUCCESS; } |
表 3. HelloWorld.cpp文件中 OnTitle 和 OnHelloWorld 方法的实现
当然,应用程序DLL能做的远远超过这点事件。ATL服务器包含的类简化了对Crypto API和微软消息队列(MSMQ)的访问,允许通过简单邮件传输协议(SMTP)进行简单的邮件发送。应用程序DLL有许多应用类用于帮助对请求的处理。它们包括用于请求参数的集合类,cookies和POST数据。多目的Internet邮件提高警惕(MIME)语法分析器可用于分析发送到Web服务器的MIME数据。请求处理器有权访问一些接口,这些接口使它能够访问存在于ISAPI扩展的EXTENSION_CONTROL_BLOCK(带请求上下文的由IIS传递到ISAPI扩展的数据结构)中的所有信息。如果所有内容都必须动态生成,在不存在.SRF文件的情况下也可以使用请求处理器。
在处理.SRF文件的过程中,ATL 服务器 ISAPI DLL由文件的开头开始执行,调入在"handler"替代标记内指定的应用程序DLL。在应用程序DLL中将调用输出端口指针,此指针然后传递所请求的处理器的名字。如果找到这个处理器,应用程序DLL将创建这个处理器的一个实例,然后处理器的IRequestHandler接口将返回到ISAPI扩展。扩展然后调用IRequestHandler::HandleRequest方法,向它传递有关HTTP请求的信息。
HandleRequest方法装入模板,对其进行分析,并将它发送到响应流中。作为性能上的一个改进,模板只分析一次。一旦它被分析过了,它就由ISAPI扩展以分析格式缓存。以后对模板的请求将ISAPI扩展的模板缓存提供服务。
本例的结果非常简单:在浏览器中显示两行文本(图2)。你将注意到文本"HelloWorld Sample"的格式在.SRF文件中进行管理:一对HTML头标签被{{标题}}调用所包围。
图 2. HelloWorld ATL 服务器应用程序的浏览器输出
总结
ATL服务器目前对于开发人员编写ISAPI代码是理想的,因为它在ISAPI和平台APIs上提供了常用代码的基本实现和简单的C++抽象层,简化了ISAPI开发中的编程任务。对此类库的补充支持是Visual C++开发环境中的向导和部署及调试支持。
预见到对Web应用程序有极大性能需求的建筑和开发经理也应当考虑ATL服务器。ATL服务器使用已经证实的方法确保在IIS之上最高级别的性能。希望进行高性能C++和IIS开发的任何C++开发人员,特别是具有ATL经验的开发人员将发现ATL服务器是有用的。
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者