除了以上列出的共同特點(diǎn)和技術(shù)以外,ASP.NET Web Services、.NET Remoting 和 ATL Web Services 還分別為開發(fā)人員提供了許多特有的功能,下面這些內(nèi)容有助于開發(fā)人員在生成應(yīng)用程序時(shí)把握正確的方向。 假如您要生成 .ASP 應(yīng)用程序,ASP.NET Web Services:
建立于 ATL Server ISAPI Web 應(yīng)用體系機(jī)構(gòu)之上(利用線程緩沖池、緩存,等等)。
將 SOAP 用作 Web 開發(fā)工具
ASP.NET Web Services 提供了 RAD 方式,以供快速創(chuàng)建和使用 Web 服務(wù)。這些服務(wù)寬松地組合在一起,并可與 ASP.NET 高度集成。ASP.NET Web Services 是 Web 開發(fā)人員在 Internet 上提供 Web 服務(wù)的首選方法,它的目標(biāo)是提供快速、簡便、性能優(yōu)越的 SOAP 服務(wù)。
ASP.NET Web Services 可以和 ASP.NET HTTP 引擎深入集成,這使得熟悉 Microsoft Web 開發(fā)技術(shù)的開發(fā)人員能夠方便地生成和使用基于 SOAP 的 Web 服務(wù)。
ASP.NET 以 .asmx 文件提供對 Web Services 的支持。.asmx 文件是與 .aspx 文件相似的文本文件。這些文件可以是包含 .aspx 文件的 ASP.NET 應(yīng)用程序的一部分。它們可以使用 URI 尋址方式,這和 .aspx 文件相同。
[WebMethod] public String SayHelloWorld() { return "Hello World"; }
} 這個(gè)文件以 ASP.NET 指示的 Web Service 開始,并將語言設(shè)置為 C#(也可以將語言設(shè)置為 Microsoft Visual Basic?、C 或大約 30 種第三方語言中的任何一種)。然后,它將導(dǎo)入名稱空間 System.Web.Services。這個(gè)名稱空間是必要的,您必須在文件中包括它。下一步,聲明 HelloWorld 類。這個(gè)類從基類 WebService 導(dǎo)出。最后,任何要作為服務(wù)的一部分來訪問的方法在它們的簽名之前將具有自定義屬性 [WebMethod],在 Visual Basic 中則為“<WEBMETHOD()>”。
要使這個(gè)服務(wù)生效,可以將文件命名為 HelloWorld.asmx,然后將它放在虛擬目錄 Bar 中的服務(wù)器 Foo 上。使用幾乎任何兼容 Html 3.2 或更高版本的瀏覽器,都可以輸入 URL http://Foo/Bar/HelloWorld.asmx 來顯示這個(gè) Web Service 的公用方法(標(biāo)有 WebMethod 屬性),以及那些可用來調(diào)用這些方法的協(xié)議,例如 SOAP 或 HTTP GET。假如在 Internet EXPlorer 地址欄中輸入 http://Foo/Bar/HelloWorld.asmx?SDL,基于服務(wù)說明語言 (WSDL) 語法,將產(chǎn)生與 XML 文件相同的信息。這個(gè) WSDL 文件由訪問服務(wù)的客戶使用,并且非常重要。 訪問 Web Serivces
除了使開發(fā)人員能夠創(chuàng)建 Web Services 的技術(shù)之外,Microsoft .NET 框架還提供了一套用來“使用”(即以客戶端身份訪問)Web Services 的成熟工具與代碼。因?yàn)?Web Services 基于簡單對象訪問協(xié)議 (SOAP) 和 HTTP 等開放協(xié)議,所以這種客戶端技術(shù)也可以用于使用非 ASP.NET Web Services。
SDK 中有一種稱為 WebServiceUtil.exe 的工具(在 VS IDE 中使用“Add Web Reference...”選項(xiàng)時(shí)自動生效)。這個(gè)程序可用于下載 Web Service 的 WSDL 說明,然后創(chuàng)建表示這個(gè)服務(wù)的地址的代理類。例如,您可以輸入:
ATL Server Web Services 為 C++ 開發(fā)人員提供了在本機(jī)代碼中創(chuàng)建和使用 Web Services 的簡便方式。ATL Server 是 C++ 開發(fā)人員在 Internet 上提供和使用 Web Services 的首選方法,其設(shè)計(jì)目的是為包含 SOAP 的 Web 應(yīng)用提供快速、輕便和高度靈活的程序庫。
ATL Server 之所以稱為 ATL,是因?yàn)樗w現(xiàn)了同時(shí)追求高性能和靈活性的 ATL 目標(biāo)。例如,您可以很輕易地拋開 ATL Server HTTP 模型,編寫您自己的調(diào)度程序,同時(shí)仍然獲得 ATL Server 封送/協(xié)議代碼的好處。
ATL Server Web Services 使用與 COM 相似的語法說明接口,便于目前的 ATL 開發(fā)人員學(xué)習(xí)。這種與 COM 相似的語法答應(yīng)開發(fā)人員輕而易舉地將對象同時(shí)以 COM 對象和 Web Service 方式提供。
屬性的引入大大簡化了代碼,使它對于非 ATL 開發(fā)人員也很輕易。ATL Server 具有和其他所有 .NET Web Services 進(jìn)行互操作的能力,這對那些在一個(gè)應(yīng)用程序中使用多種技術(shù)的開發(fā)人員來說十分方便。
接口:新的 __interface 要害字使開發(fā)人員很輕易創(chuàng)建 COM 對象或 Web Services 接口。
[ uuid("D7DAE6FD-AEBB-4579-BD8D-866F74139501"), object ] __interface IWeb_Service_ExampleService { [id(1)] HRESULT HelloWorld([in] BSTR bstrInput, [out, retval] BSTR *bstrOutput); }; 這是一個(gè)運(yùn)用 ATL Server 定義 Web Service 接口的例子。通過 C++ 屬性的運(yùn)用,嵌入式 IDL 屬性和新的 __interface 要害字、ATL Server Web Service 接口看起來和新的屬性化的 COM 接口非常相似。這里的 Web Service 接口樣例 IWeb_Service_ExampleService 僅實(shí)現(xiàn)一個(gè)方法 HelloWorld。HelloWorld 用 BSTR 作為輸入并返回 BSTR 作為輸出。
請求處理程序:請求處理程序是一個(gè) C++ 類,該類通過處理程序映射來提供,并且具有通過替代方法映射來提供的方法。處理程序映射只是文字標(biāo)簽與類名稱的映射,而方法映射是類中文字標(biāo)簽與方法的映射。
[ request_handler(name="Default",sdl="GenWeb_Service_ExampleServiceSDL"), soap_handler( name="Web_Service_ExampleService", namespace="urn:Web_Service_ExampleService", protocol="soap" ) ] class CWeb_Service_ExampleService: public IWeb_Service_ExampleService { public:
return S_OK; } }; ATL Server 請求處理程序模型與 Web 應(yīng)用和 Web Services 非常相似。圖 1 顯示了處理請求的模型:
圖 1. ATL Server 請求處理模型 HTTP Request 進(jìn)入 IIS,將請求(基于 URL 及其擴(kuò)展)映射到適當(dāng)?shù)?ISAPI DLL。然后,ISAPI DLL 把在請求中指定的處理程序(即在標(biāo)簽或查詢參數(shù)中指定的處理程序)映射到適當(dāng)?shù)?application DLL。Application DLL 再將這個(gè)處理程序映射到 C++ 對象。在這個(gè)模型(ATL Server 模型)中,Web 應(yīng)用程序和 Web Service 的唯一差別在于最后一步。使用 Web Services,C++ 對象能夠解碼/編碼 SOAP(當(dāng)編譯器解析 soap_handler 屬性時(shí),它會插入執(zhí)行此操作的代碼)。
您可以理解,這個(gè)類是從我們的接口繼續(xù)過來的,并且我們使用 [soap_method] 屬性指示將由 HelloWorld 方法來處理 SOAP 請求。實(shí)現(xiàn)這種方法和實(shí)現(xiàn)任何其他 C++ 方法是一樣的。
這個(gè) soap_handler 屬性還確保自動生成有效說明服務(wù)的 WSDL。Web Service 的用戶使用這個(gè)對服務(wù)的說明(格式為 XML/WSDL),確保他們能夠以正確的格式發(fā)送/接收正確的數(shù)據(jù)。
通過 ATL Server 使用 Web Services
通過 ATL Server 使用 Web Services 相對來說是個(gè)比較簡單的操作。開發(fā)人員只需使用 “Add Web Reference” 對話框,將它指向 .disco 文件,然后指向 WSDL,這和使用其他類型的 Web 引用一樣。這個(gè)對話框在后臺運(yùn)行在 Web Service 的 WSDL 上的 sproxy.exe 實(shí)用程序(對于非本機(jī)的 .NET Web Services 有另外一個(gè)實(shí)用程序)。
該操作將創(chuàng)建 Web Service 代理文件,包含要求利用所請求的 Web Service 的全部 C++ 代碼。使用 WSDL 中的信息,代理生成器能夠判定 Web Service 要接收到的數(shù)據(jù)以及它要返回給客戶端的數(shù)據(jù)。這就答應(yīng)代理生成器創(chuàng)建可以和 Web Service“交談”的頭文件。
您只需創(chuàng)建自己的 Web Service 類(如在生成的頭文件中查找到的一樣)的實(shí)例,并且使用合適的方法即可,例如:
CWeb_Service_ExampleServiceService MyService; CComBSTR bstrOut; CComBSTR bstrIn(L"World"); MyService.HelloWorld ( bstrIn ,&bstrOut,); wprintf(bstrOut); 現(xiàn)在,您就已經(jīng)有一個(gè)基本的 ATL Server Web Service 和 ATL Server Web Service Consumer 了。