ATL服务器:用 Visual C++创建的高性能的Web应用程序和XML Web 服务
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}} < /body > |
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() |
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服務器是有用的。
(作者: 責任編輯:)總結
以上是生活随笔為你收集整理的ATL服务器:用 Visual C++创建的高性能的Web应用程序和XML Web 服务的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android Button 监听的几种
- 下一篇: 转载一篇开源http服务器(C语言)