程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> VC >> 關於VC++ >> 用Visual C++創建的高性能的Web應用程序和XML Web服務

用Visual C++創建的高性能的Web應用程序和XML Web服務

編輯:關於VC++

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 >

圖 1. 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()

圖 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擴展的模板緩存提供服務。

本例的結果非常簡單:在浏覽器中顯示兩行文本(圖4)。你將注意到文本“HelloWorld Sample”的格式在.SRF文件中進行管理:一對HTML頭標簽被{{標題}}調用所包圍。

圖 4. HelloWorld ATL 服務器應用程序的浏覽器輸出

總結

ATL服務器目前對於開發人員編寫ISAPI代碼是理想的,因為它在ISAPI和平台APIs上提供了常用代碼的基本實現和簡單的C++抽象層,簡化了ISAPI開發中的編程任務。對此類庫的補充支持是Visual C++開發環境中的向導和部署及調試支持。

預見到對Web應用程序有極大性能需求的建築和開發經理也應當考慮ATL服務器。ATL服務器使用已經證實的方法確保在IIS之上最高級別的性能。希望進行高性能C++和IIS開發的任何C++開發人員,特別是具有ATL經驗的開發人員將發現ATL服務器是有用的。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved