您的位置:首页 > 编程语言 > C语言/C++

ATL服务器:用 Visual C++创建的高性能的Web应用程序和XML Web 服务

2015-01-27 10:10 274 查看
C++是很多网络中繁忙站点的核心。这为构建中间层企业逻辑提供了高度的性能基础,经常用于扩展Web服务器和动态地生成HTML。今天使用Internet信息服务(IIS)和Visual
Studio?的开发人员可以通过动态服务器主网页(ASP)创建动态内容,通过ISAPI扩展IIS。但尽管ASP容易学,ISAPI只被相对较少的开发人员所使用,这主要是因为很难直接从象Visual C++?这样的开发工具中进行定位,而且支持也仅限于库封装器和ISAPI扩展向导。
  ATL 服务器,包含在下一代Visual C++?中的对活动模板库(ATL)的一组扩展,使C++开发人员能开发性能极高的IIS Web应用程序。ATL服务器提供了功能强大的类,这些类天然能通过Internet服务器应用程序编程接口(ISAPI)与IIS进行交互。然而,与今天开发人员所知道的ISAPI不同,ATL服务器是可获得的、直观的,在开发环境中,它依赖构建入ATL样式和向导内的最少的类。另外,对ATL服务器的广泛支持已经构建入了Visual
C++中,包括部署功能和调试支持。

  在Windows DNA解决方案中使用 ATL 服务器

  与微软其它Windows?DNA服务器技术不同,ATL服务器允许组织利用高性能、相对相对便宜的PC硬件组建Web站点的基础。ATL服务器被设计为可与对称多处理(SMP)硬件协同工作,但它还设计为允许新设备加入到现有环境中。当硬件加入到服务器群中时,用ATL服务器构建的应用程序将进行扩展。

  ATL服务器核心实现案例中对用如ASP之类技术构建现有解决方案进行扩展。ATL服务器是对ASP的补充,可以有选择地用于性能至关重要的Web应用程序的各个部分。在很多情况下,ATL服务器并不是必需的;相反,ASP和将来版本的ASP将提供很多性能。当性能极为重要时,才使用ATL服务器。这与C++通用模型是一致的。很多公司只在解决方案需要时才使用他们的C++开发资源,通常要达到尽可能高的性能或编写其它高级语言无法访问的低级API。

  ATL服务器也是用Visual C++构建XML Web 服务的工具。创建ATL服务器应用程序的开发人员可以在ATL服务器应用程序向导中选择"作为Web服务发布"。通过发布XML Web 服务,开发人员可以通过Web服务器提供应用程序;此应用程序可用SOAP通过HTTP调用。这就将Web应用程序的可编程能力扩展到要通过防火墙的远程客户端。

  ATL 服务器结构概述

  ATL服务器解决方案只需要在服务器端安装文件。一个典型ATL服务器应用程序的文件包括一个ATL 服务器ISAPI动态链接库(DLL),一个或多个.SRF文件,零个或多个应用程序DLLs。



  运行中的ATL 服务器

  解释这种结构最好的方式是举一个例子:规范的"Hello World!"。此处显示的"Hello World!"应用程序是下一Visual C++发行版用于构建ATL服务器应用程序的开端。运行完ATL服务器应用程序向导后创建的在部分代码如此处所示。

  一个ATL服务器ISAPI DLL被用于每个Web站点。DLL作为IIS的扩展,允许引用了.SRF文件的URLs被DLLs所处理。ISAPI DLL是IIS注册的用于.SRF文件的默认处理器。在这个例子中,用户访问http://webserver/atlserver/HelloWorld.srf通过ISAPI DLL初始化.SRF文件的处理过程。ISAPI DLL 通过 CisapiExtension类完成它的实现。ISAPI扩展通过IserviceProvider接口提供来自ISAPI扩展的服务以请示处理对象。ISAPI可能提供的一些服务是会话服务,每线程数据库链接,浏览器功能服务,及一些缓冲服务,包括模板,DLL,和二进制大对象(BLOB)缓冲。如果在ATL服务器应用程序向导选中了,ATL服务器将自动为开发人员构建一个ISAPI
DLL。开发人员可以根据期望的定置等级,修改生成的ISAPI DLL的默认代码,但这并不是必需的。

  .SRF文件驻留在Web服务器上,它定义了网页如何布局,由ATL服务器应用程序DLLs生成的动态内容如何使用。.SRF文件的内部内容是大多数开发人员所熟悉的;他们象HTML文件,但有一些值得注意的附加部分。

{{handler HelloWorld.dll/Default}}

< html >

< head >

        < title >{{Title}}< /title >

    < /head >

    < body >

        < h1 >{{Title}}< /h1 >

{{HelloWorld}}

    < /body >

< /html >

  HelloWorld.srf文件的内容

  此.SRF文件的最上一行指出,由这个文件调用的代码位于HelloWorld DLL中,而HelloWorld DLL是为名为"'Default'"的C++对象提供一个接口。注意,此处使用了两对大括号。在SRF文件中,这两对大括号叫作代替标记。这些大括号中的内容包含了描述指示和/或在文件上部的处理器标记中命名的C++对象的方法名。{{Title}} 和 {{HelloWorld}}替代标记指定了"'Default'"对象(此对象将被调用以提供动态内容)的功能。

  也许你已经注意到了,.SRF文件将HTML页布局与产生动态内容的代码区分开来。借助于ATL服务器,网页设计器可以在需要动态内容的地方,使用HTML编辑工具如Visual Studio .NET?位置标签对网页进行设计和布局。这些标签与由Visual C++创建的服务器端应用程序DLLs内的代码相对应。对代码进行处理的开发人员可以这样做,而不必关心网页中布局或静态文本的偶尔变化。

  ATL服务器解决方案的大部分工作是在应用程序DLL中实现的。"替代方法映射"部分将.SRF文件中出现在双大括号中的名字映射到应用程序DLL源文件。

BEGIN_REPLACEMENT_METHOD_MAP(CHelloWorld)

    REPLACEMENT_METHOD_ENTRY("Title", OnTitle)

    REPLACEMENT_METHOD_ENTRY("HelloWorld", OnHelloWorld)

END_REPLACEMENT_METHOD_MAP()
  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;

    }

  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服务器是有用的。

(作者: 责任编辑:)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: