建立於 ATL Server ISAPI Web 應用程式體系機構之上(利用線程緩衝池、緩衝,等等)。
將 SOAP 用作 Web 開發工具
ASP.NET Web Services 提供了 RAD 方式,以供快速建立和使用 Web 服務。這些服務寬鬆地組合在一起,並可與 ASP.NET 高度整合。ASP.NET Web Services 是 Web 開發人員在 Internet 上提供 Web 服務的首選方法,它的目標是提供快速、簡便、效能優越的 SOAP 服務。
ASP.NET Web Services 可以和 ASP.NET HTTP 引擎深入整合,這使得熟悉 Microsoft Web 開發技術的開發人員能夠方便地產生和使用基於 SOAP 的 Web 服務。
ASP.NET 以 .asmx 檔案提供對 Web Services 的支援。.asmx 檔案是與 .aspx 檔案相似的文字檔。這些檔案可以是包含 .aspx 檔案的 ASP.NET 應用程式的一部分。它們可以使用 URI 定址方式,這和 .aspx 檔案相同。
[WebMethod] public String SayHelloWorld() {
return "Hello World";
}
}
這個檔案以 ASP.NET 指示的 Web Service 開始,並將語言設定為 C#(也可以將語言設定為 Microsoft Visual Basic®、C 或大約 30 種第三方語言中的任何一種)。然後,它將匯入名稱空間 System.Web.Services。這個名稱空間是必要的,您必須在檔案中包括它。下一步,聲明 HelloWorld 類。這個類從基類 WebService 匯出。最後,任何要作為服務的一部分來訪問的方法在它們的簽名之前將具有自訂屬性 [WebMethod],在 Visual Basic 中則為“<WebMethod()>”。
要使這個服務生效,可以將檔案命名為 HelloWorld.asmx,然後將它放在虛擬目錄 Bar 中的伺服器 Foo 上。使用幾乎任何相容 HTML 3.2 或更高版本的瀏覽器,都可以輸入 URL http://Foo/Bar/HelloWorld.asmx 來顯示這個 Web Service 的公用方法(標有 WebMethod 屬性),以及那些可用來調用這些方法的協議,例如 SOAP 或 HTTP GET。如果在 Internet Explorer 地址欄中輸入 http://Foo/Bar/HelloWorld.asmx?SDL,基於服務說明語言 (WSDL) 文法,將產生與 XML 檔案相同的資訊。這個 WSDL 檔案由訪問服務的客戶使用,並且非常重要。
訪問 Web Serivces
除了使開發人員能夠建立 Web Services 的技術之外,Microsoft .NET 架構還提供了一套用來“使用”(即以用戶端身份訪問)Web Services 的成熟工具與代碼。因為 Web Services 基於簡易物件存取通訊協定 (SOAP) (SOAP) 和 HTTP 等開放協議,所以這種用戶端技術也可以用於使用非 ASP.NET Web Services。
SDK 中有一種稱為 WebServiceUtil.exe 的工具(在 VS IDE 中使用“Add Web Reference...”選項時自動生效)。這個程式可用於下載 Web Service 的 WSDL 說明,然後建立表示這個服務的地址的代理類。例如,您可以輸入:
將 SOAP 用作 ATL 開發工具
ATL Server Web Services 為 C++ 開發人員提供了在機器碼中建立和使用 Web Services 的簡便方式。ATL Server 是 C++ 開發人員在 Internet 上提供和使用 Web Services 的首選方法,其設計目的是為包含 SOAP 的 Web 應用程式提供快速、輕便和高度靈活的程式庫。
ATL Server 之所以稱為 ATL,是因為它體現了同時追求高效能和靈活性的 ATL 目標。例如,您可以很容易地拋開 ATL Server HTTP 模型,編寫您自己的發送器,同時仍然獲得 ATL Server 封送/協議代碼的好處。
ATL Server Web Services 使用與 COM 相似的文法說明介面,便於目前的 ATL 開發人員學習。這種與 COM 相似的文法允許開發人員輕而易舉地將對象同時以 COM 物件和 Web Service 方式提供。
屬性的引入大大簡化了代碼,使它對於非 ATL 開發人員也很容易。ATL Server 具有和其他所有 .NET Web Services 進行互操作的能力,這對那些在一個應用程式中使用多種技術的開發人員來說十分方便。
介面:新的 __interface 關鍵字使開發人員很容易建立 COM 物件或 Web Services 介面。
這是一個運用 ATL Server 定義 Web Service 介面的例子。通過 C++ 屬性的運用,嵌入式 IDL 屬性和新的 __interface 關鍵字、ATL Server Web Service 介面看起來和新的屬性化的 COM 介面非常相似。這裡的 Web Service 介面範例 IWeb_Service_ExampleService 僅實現一個方法 HelloWorld。HelloWorld 用 BSTR 作為輸入並返回 BSTR 作為輸出。
請求處理常式:請求處理常式是一個 C++ 類,該類通過處理常式映射來提供,並且具有通過替代方法映射來提供的方法。處理常式映射只是文字標籤與類名稱的映射,而方法映射是類中文字標籤與方法的映射。
[
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:
ATL Server 請求處理常式模型與 Web 應用程式和 Web Services 非常相似。圖 1 顯示了處理請求的模型:
圖 1. ATL Server 請求處理模型
HTTP Request 進入 IIS,將請求(基於 URL 及其擴充)映射到適當的 ISAPI DLL。然後,ISAPI DLL 把在請求中指定的處理常式(即在標籤或查詢參數中指定的處理常式)映射到適當的 Application DLL。Application DLL 再將這個處理常式映射到 C++ 對象。在這個模型(ATL Server 模型)中,Web 應用程式和 Web Service 的唯一差別在於最後一步。使用 Web Services,C++ 對象能夠解碼/編碼 SOAP(當編譯器解析 soap_handler 屬性時,它會插入執行此操作的代碼)。
您可以理解,這個類是從我們的介面繼承過來的,並且我們使用 [soap_method] 屬性指示將由 HelloWorld 方法來處理 SOAP 請求。實現這種方法和實現任何其他 C++ 方法是一樣的。
這個 soap_handler 屬性還確保自動產生有效說明服務的 WSDL。Web Service 的使用者使用這個對服務的說明(格式為 XML/WSDL),確保他們能夠以正確的格式發送/接收正確的資料。
通過 ATL Server 使用 Web Services
通過 ATL Server 使用 Web Services 相對來說是個比較簡單的操作。開發人員只需使用 “Add Web Reference” 對話方塊,將它指向 .disco 檔案,然後指向 WSDL,這和使用其他類型的 Web 參考一樣。這個對話方塊在後台運行在 Web Service 的 WSDL 上的 sproxy.exe 公用程式(對於非原生 .NET Web Services 有另外一個公用程式)。
該操作將建立 Web Service 代理檔案,包含要求利用所請求的 Web Service 的全部 C++ 代碼。使用 WSDL 中的資訊,代理產生器能夠判斷 Web Service 要接收到的資料以及它要返回給用戶端的資料。這就允許代理產生器建立可以和 Web Service“交談”的標頭檔。
您只需建立自己的 Web Service 類(如在產生的標頭檔中尋找到的一樣)的執行個體,並且使用合適的方法即可,例如: