COM+ Web 服務:通過複選框路由到 XML Web Services(1) (微軟中國)

來源:互聯網
上載者:User
services|web|xml|複選框|微軟 COM+ Web 服務:通過複選框路由到 XML Web Services
John Noss 和 Jonathan Hawkins
Microsoft Corporation
2001年11月

摘要:COM+ Web 服務新增了某些功能,可與 Microsoft .NET Remoting 整合,並通過 SOAP for COM+ 組件實現 XML Web Services 發布的複選框啟用。本文通過幾個樣本介紹基本的互通性、配置以及託管和非託管 COM+ 組件(在 Microsoft Windows .NET Server 和 Microsoft Windows XP Professional 上作為 XML Web Services 發布)的部署。

目錄

  • 簡介
  • 簡單的已知對象 (WKO) 樣本
  • 簡單的用戶端啟用物件 (CAO) 樣本
  • 事務性組件樣本
  • 一切才剛剛開始
簡介
COM+ Web 服務新增了某些功能,可與 Microsoft .NET Remoting 整合,並通過 SOAP for COM+ 組件實現 XML Web Services 發布的複選框啟用。本文通過幾個樣本介紹基本的互通性、配置以及託管和非託管 COM+ 組件(在 Microsoft Windows .NET Server 和 Microsoft® Windows® XP Professional 上作為 XML Web Services 發布)的部署。還通過樣本介紹了幾個新功能,使運行 Windows XP 的用戶端能夠訪問遠程伺服器上的 XML Web Services。
當開發人員使用 .NET Remoting 和Managed 程式碼來完善現有的非託管 COM+ 伺服器和用戶端代碼時,這些功能可以協助他們利用和簡化遷移過程。在 .NET 架構的測試階段,有許多使用者問及如何配置 .NET Remoting 來進行簡單的跨電腦啟用操作。COM+ Web 服務的解決方案是同時自動設定伺服器 (Microsoft Windows .NET Server) 和用戶端 (Microsoft Windows XP Professional) 電腦,使用 .NET Remoting 來提供 SOAP 以替代 DCOM。
Microsoft Windows XP 和 Microsoft .NET 架構是本年度發布的兩個最重要的軟體。二者的目的都是為了簡化過程並提高軟體開發人員的能力,因此利用這兩種產品並發揮各自優勢來提供一套整合的、便於使用的解決方案就成為自然之選。COM+ Web 服務提供了一種簡單的方法,可以將 COM+ 組件發布為 XML Web Services ;還提供了新的整合功能,用於從用戶端電腦訪問 XML Web Services。從以下 Microsoft Visual Basic Scripting Edition (VBScript) 樣本中可以瞭解其便於使用的特點,該樣本用於確定 Alaska 的 Fairbanks 的當前氣溫。請在 Windows XP(已安裝 .NET 架構)或 Windows .NET Server 上運行此樣本:
set SoapObj = GetObject   ("soap:wsdl=http://www.xmethods.net/sd/TemperatureService.wsdl")WScript.Echo "Fairbanks 氣溫 = " & SoapObj.getTemp("99707")

在上面的樣本中,伺服器是在 Linux 上啟動並執行 Apache SOAP Server,但也可以使用任何具有標準 Web 服務說明語言 (WSDL) 描述功能的 SOAP V1.1 伺服器。
注意: 如果出現“未找到伺服器”錯誤,您需要在控制台的 Internet 選項中手動設定防火牆設定。

使用 SOAP 作為電腦之間通訊協定的優點之一,在於它增加了可以互動操作的電腦的種類。.NET Remoting 具有以下兩種基本操作模型:
  • 已知對象 (WKO): WKO 是 SOAP V1.1 所支援的最常見的 XML Web Services 模型。它允許與其他運行 SOAP V1.1 相容堆棧的電腦協同工作。伺服器和用戶端可以是運行 Apache SOAP 的非 Windows 伺服器和運行 pocketSOAP 的 Pocket PC,也可以是基於 Windows 的伺服器和用戶端。唯一的要求是伺服器上必須安裝了與 WSDL 1.1 版本相容的描述功能,以便產生相應的代理。此代理是在運行時產生的,並且第一次使用 WSDL Moniker時沒有使用者介入。
  • 用戶端啟用的對象 (CAO): CAO 提供了更豐富的開發環境,包括穩定持久的串連。較之典型的 XML Web Services 模型,它更類似於 DCOM 模型,但要求在伺服器和用戶端上都安裝有某一版本的 .NET 架構。

COM+ Web 服務可以使用 WKO 和 CAO 兩種啟用模型,而且所有的伺服器應用程式都可以提供 WKO 和 CAO 端點。通過組合使用啟用模型、XML Web Services 和 .NET Remoting,開發人員可以輕鬆地組合和匹配託管及非託管的用戶端和伺服器。下表所示為兩種啟用模型所支援方案的樣本。
表 1:WKO 模型支援的方案WKO 用戶端WKO 伺服器VB 6.0 或非託管 C++VB 6.0 或非託管 C++VB 6.0 或非託管 C++VB .NET 或 C#VB 6.0 或非託管 C++SOAP V1.1(在 WSDL 中描述)VB 6.0 或非託管 C++Microsoft SOAP(ATL Server,SOAP TK)C# 或 VB .NETSOAP V1.1(在 WSDL 中描述)C# 或 VB .NETVB 6.0 或非託管 C++C# 或 VB .NETVB .NET 或 C#C# 或 VB .NETMicrosoft SOAP(ATL Server,SOAP TK)Microsoft SOAP Toolkit V2.0VB 6.0 或非託管 C++Microsoft SOAP Toolkit V2.0C# 或 VB .NETSOAP v1.1VB 6.0 或非託管 C++SOAP v1.1C# 或 VB .NET
表 2:CAO 模型支援的方案CAO 用戶端CAO 伺服器C# 或 VB .NET(早期繫結)VB 6.0 或非託管 C++VB 6.0 或非託管 C++VB 6.0 或非託管 C++VB 6.0 或非託管 C++C# 或 VB .NETC# 或 VB .NET[TD]C# 或 VB .NET
這種新的 COM+ Web 服務適用於以下使用者:
  1. 當前安裝有 Microsoft® Visual Basic® 6.0 或者非託管 Microsoft Visual C++® COM+ 應用程式(需要通過防火牆才能進行某些啟用操作)的 COM+ 使用者。(使用 SOAP 並不排斥通過 DCOM 訪問伺服器上的相同組件,用戶端電腦可以選擇協議。)對於這些客戶來說,如果要使用 SOAP 而不是 DCOM,則使用用戶端代理匯出和 CAO 模型都不需要更改用戶端和伺服器應用程式。只需要在伺服器應用程式上啟用 SOAP,將其作為用戶端代理匯出,然後將代理安裝在要用作 SOAP 用戶端的 Windows XP 電腦上。
  2. 完全遷移到 Windows XP 和 Windows .NET Server 上的Managed 程式碼的公司。COM+ Web 服務有助於在串連的兩端設定遠程端點。
  3. 需要在上述兩種方案中組合和匹配各種服務的開發人員,以及編寫託管伺服器組件、或帶有非託管伺服器組件的託管用戶端應用程式的開發人員。在第二種情況中,開發人員可以利用 COM+ Web 服務,在用Managed 程式碼替換之前充分利用早期的非託管組件。
簡單的已知對象 (WKO) 樣本
除了對 Linux 和 ApacheIn 提供 SOAP 支援外,將 COM+ Web 服務應用於其他 Microsoft 產品(例如 ATL Server Web 服務)也非常簡單。只需使用 Microsoft Visual Studio® .NET 在伺服器上產生、編譯和部署預設的 ATL Web 服務即可。對它進行訪問的用戶端代碼如下(請用駐留 ATL Server 應用程式的 Web 服務器名稱替換 MyServer,用您的 ATL Server DLL 的名稱替換 JALTServer):
mon="soap:wsdl=http://MyServer/JALTServer/JALTServer.dll?   Handler=GenJALTServerWSDL"set c = GetObject(mon)WScript.Echo c.HelloWorld("COM+ Web 服務") 

上述樣本簡單說明了 Microsoft Windows XP 和 Microsoft Windows .NET 伺服器所包含的一個新的 SOAP Moniker。

資料發布


如果您只想提供資料而不是使用資料,那麼只需選擇一個複選框,然後輸入 IIS 虛擬根名稱的值。要建立完整的 COM+ Web 服務,請執行以下步驟:
使用 Visual Basic 6.0 建立簡單的 Microsoft ActiveX® DLL,並輸入以下代碼:
Function Add(ByVal Value1 As Double, ByVal Value2 As Double) As Double Add = Value1 + Value2End Function

在 Visual Basic 項目屬性頁面上的 General選項卡中,設定 Unattended ExecutionRetained in Memory,並在 Component 選項卡中選擇 Remote Server Files。使用 Visual Basic 開發環境產生此 DLL。
在建立 Visual Basic 應用程式之後,需要將其註冊為 COM+ 應用程式。啟動元件服務管理工具,在 Windows XP 上建立 COM+ 應用程式。(在此樣本中,應用程式被命名為 VB6Soap。)將所建立的 DLL 作為組件匯入,然後瀏覽到 COM+ 應用程式屬性頁面的 Activation 選項卡,選擇 Uses SOAP,輸入一個 SOAP Vroot(例如,VB6Soap),然後單擊 OK(如圖 1 所示)。

圖 1:VB6Soap COM+ 應用程式屬性頁面
現在,應用程式發行為 XML Web Services,並且可以使用 SOAP 啟用。使用 Internet Explorer 瀏覽到 http://localhost/VB6Soap/default.aspx,您會在該 aspx 頁上發現一個超連結,通過它可以連結到您的組件所產生的 WSDL。以下 VBScript 將啟用您的組件:
set c = GetObject   ("soap:wsdl=http://localhost/VB6Soap/VB6Soap.Calc.soap?WSDL")for i = 1 to 10 WScript.Echo i & " " & c.Add(i,i) & " " & Timenext 

如果用您的伺服器名稱替換上面指令碼中的 localhost,它也可以在遠程用戶端電腦上正常工作。引用的頁面(在此樣本中為 VB6Soap.Calc.soap)是以 .soap 尾碼結尾的組件 ProgID。
要通過 SOAP Toolkit(與 Windows XP Professional 一起提供,並且不使用 .NET Remoting)訪問同一端點,請運行以下 VBScript:
set c = CreateObject("MSSOAP.SOAPClient")c.mssoapinit("http://localhost/VB6Soap/VB6Soap.Calc.soap?WSDL")for i = 1 to 10 WScript.Echo i & " " & c.Add(i,i) & " " & Timenext 

要簡化在伺服器上發布 SOAP 的過程,您可以使用 Microsoft C#™ 或 Visual Basic .NET,並從 ServicedComponent 繼承。下面是簡單託管組件的Managed 程式碼樣本:
using System;using System.Reflection;using System.Runtime.InteropServices;using System.EnterpriseServices;[assembly: ApplicationName("CSSoap")][assembly: ApplicationActivation(ActivationOption.Server,    SoapVRoot="CSSoap")][assembly: AssemblyKeyFile("CSSoap.snk")]namespace CSSoap{  public interface ICalc  {   double Add (double Value1, double Value2);  }  [ClassInterface(ClassInterfaceType.AutoDual)]  [TransactionAttribute(TransactionOption.None)]  public class Calc : ServicedComponent, ICalc  {   public double Add (double Value1, double Value2);   {      return (Value1 + Value2);   }   }}

上述樣本中值得注意的是 ApplicationActivation 屬性:
[assembly: ApplicationActivation(ActivationOption.Server,    SoapVRoot="CSSoap")]

建立 C# 組件,將它安裝在全域組件快取中,然後運行 regsvcs.exe 將它註冊為 COM+ 應用程式。這樣,該組件就被發布為 IIS 虛擬根和 SOAP 端點。要成功地遠程使用 ServicedComponent,還需要使用 gacutil.exe 或 .NET 架構使用者介面,將這個編譯後的程式集放入全域組件快取 (GAC) 中。要通過 WSDL 訪問此 SOAP 端點,請使用以下 VBScript:
set c = GetObject   ("soap:wsdl=http://localhost/CSSoap/CSSoap.Calc.soap?WSDL")for i = 1 to 10 WScript.Echo i & " " & c.Add(i,i) & " " & Timenext 

作為 SOAP 互動操作性的簡單樣本,SOAP Toolkit 與 Windows XP Professional 一起提供,並且即使運行 Windows XP 的用戶端電腦上沒有安裝 .NET 架構,使用以下 VBScript 也可以訪問 COM+ SOAP 端點:
set c = CreateObject("MSSOAP.SOAPClient")c.mssoapinit("http://localhost/CSSoap/CSSoap.Calc.soap?WSDL?for i = 1 to 10 WScript.Echo i & " " & c.Add(i,i) & " " & Timenext 

為簡單起見,上述樣本全部使用 VBScript 來訪問 Web 服務。其實也可以通過 SOAP WSDL Moniker使用 Visual C+、Visual Basic 6.0、Visual Basic .NET 或 C# 進行編寫。例如,Visual Basic .NET 也可以使用編譯的Managed 程式碼訪問同一對象,如下例所示:
Imports SystemImports System.Runtime.InteropServicesModule WKOClient Sub Main()    Dim WSDLMoniker =       "soap:wsdl=http://localhost/CSSoap/CSSoap.Calc.soap?WSDL"      Dim obj as Object   obj = Marshal.BindToMoniker(WSDLMoniker)   Console.WriteLine(obj.Add(1,2)) End SubEnd Module

使用 VBScript 是為了表明,託管的和非託管的用戶端都可以訪問發布為 COM+ Web 服務的 COM+ 組件。在大型組織或應用程式中,很難一次轉換所有部分,COM+ Web 服務允許將一部分應用程式轉換為Managed 程式碼,而無需立即全面重新編寫現有的應用程式。 簡單的用戶端啟用物件 (CAO) 樣本
伺服器上的 COM+ Web 服務發布將每一組件發布為 WKO 和 CAO 兩種形式,因此不需要額外的伺服器配置。在伺服器上唯一要做的操作是,在選擇 Uses SOAP 複選框(位於 COM+ 應用程式屬性頁面的 Activation 選項卡上)並在 SOAP VRoot 文字框中輸入值以後,將 COM+ 應用程式作為代理程式匯出。下面顯示了匯出代理應用程式的必要步驟:
  1. 用滑鼠右鍵單擊元件服務管理工具中的 VB6Soap COM+ 應用程式,並選擇 Export,如圖 2 所示。

    圖 2:元件服務管理工具
  2. 在圖 3 所示的 COM+ 應用程式匯出嚮導中,輸入代理 .msi 檔案的位置和名稱。

    圖 3:COM+ 應用程式匯出嚮導
  3. 將代理 .msi 檔案安裝在單獨的用戶端電腦上,作為預先產生的 COM+ 應用程式。
    安裝時將對代理進行適當的配置,以便通過 SOAP 訪問正確的伺服器和虛擬根。對於用戶端啟用,可以不使用 WSDL Moniker,而使用常規非託管的 COM+ 啟用(例如,CoCreateInstanceCreateObject 等)。在伺服器上建立並在單獨的用戶端電腦上安裝上述 Visual Basic 計算機樣本的應用程式代理程式後,以下 VBScript 將通過 SOAP 訪問該伺服器:
    set c = CreateObject("VB6Soap.Calc")for i = 1 to 10 WScript.Echo i & " " & c.Add(i,i) & " " & Timenext 

    如果代理程式沒有啟用 COM+ Web 服務,則上述 VBScript 代碼將使用 DCOM 訪問伺服器應用程式。


相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。