COM+ Web 服務:通過復選框路由到 XML Web Services (轉)9
2024-09-05 20:55:50
供稿:網友
編譯并運行此 visual basic .net 應用程序,將產生與前面兩個 vbscript cao 示例相同的輸出內容。
因為服務器應用程序將組件發布為 cao 和 wko 兩種形式,所以由遠程客戶端選擇激活方法。雖然可能只對學術研究有意義,但是單一客戶端計算機確實可以使用同一組件的兩種遠程激活方法,訪問遠程服務器上同一個 soap 發布的虛擬根。
soap 與 dcom 的局限性和區別
.net remoting 的目的之一是提供豐富的分布式環境,使開發人員能夠在此環境中對序列化協議(格式化程序)和網絡協議(頻道)進行組合與匹配。.net 框架 1.0 版本中的 com+ web 服務僅支持一種格式化程序 (soap) 和一種頻道 (http)。這并不是說其他頻道和格式化程序不能使用 servicedcomponents 或 com+,而是說沒有自動配置為這些備用頻道和格式化程序提供客戶端和服務器端點。
目前已經有用各種語言編寫的大量 com+ 組件。如果可以使用 com+ web 服務將所有這些組件啟用為 web 服務,那就太好了。但正如使用 .net 框架 1.0 版本一樣,并非所有現有的 com 組件都可以使用 com+ web 服務。雖然多數具備類型庫的現有組件可以正常工作,但是此版本不支持某些組件,例如 windows 腳本組件 (wsc) 組件。某些復雜的類型庫(其接口具有多重繼承級別,或依賴于多個類型庫)可能無法正常工作。此外,由于類型庫轉換的局限性,只有類型庫中默認的接口才可以作為 web 服務。
com+ web 服務并不是適用于所有現有非托管 com+ 組件的完整解決方案。現有非托管 com+ 組件中有一大部分是使用多種編程語言編寫而成的,由于不可能測試所有可能的類型庫(由支持 com+ 的各種編譯器生成),因此某些非托管 com+ 組件不能使用 com+ web 服務正確發布。com+ web 服務的目的之一就是最大程度減少做出這種評估所需的時間和精力。只需將非托管 com+ 組件發布為 com+ web 服務,開發人員就可以迅速判斷是否可以將其用作 web 服務。如果遇到問題,則可以通過若干替代方法來處理現有的非托管組件。這些替代方法包括編寫托管或非托管的包裝程序,這些包裝程序提供的兼容接口可以發布為 web 服務。多數情況下,編寫這樣的包裝程序的工作量比重新編寫整個組件要少得多。這就盡可能減少了將現有的應用程序應用為 xml web services 所需的開發和測試工作。
使用非托管(visual basic 6.0 或 visual c++)服務器時,通常越早綁定托管客戶端應用程序和 soap,越能更好地工作。在某些情況下,如果將生成的元數據用作后期綁定的跨計算機遠程代理程序,它可能無法正常工作。
在通過 http 使用 soap 格式化程序的情況下,仍然可以使用許多選項(取決于目標部署環境)。com+ web 服務為服務器和 cao 客戶端配置生成基于 xml 的遠程配置文件。(wko 激活的 url 引用已嵌入生成的客戶端代理,因此不需要配置文件。)com+ web 服務生成直觀的功能性配置文件,可由用戶自定義以滿足任何通過 http 的直接 soap 通信所不能滿足的需求。可進行自定義的區域包括用戶身份驗證,如下例所示:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.runtime.remoting>
<application>
<service>
<wellknown mode="singlecall" type="sctrans.sctranssql, sctrans,
version=0.0.0.0, culture=neutral,
publickeytoken=9c6052078b454cee"
objecturi="sctrans.sctranssql.soap" />
<activated type="sctrans.sctranssql, sctrans" />
</service>
</application>
</system.runtime.remoting>
<identity impersonate="true" />
</configuration>
上例中添加的突出顯示的行可以在激活 com+ 組件(通過 soap 調用)時使用用戶的身份標識。(默認情況下,iis 虛擬根使用標準的 iis 身份驗證。)這樣在使用 soap 時可以實現 com+ 的分區(一種 com+ windows .net server 功能),從而可根據用戶的身份標識來實際調用不同的組件。
另一個可以自定義的區域包括客戶端激活對象的生存期管理,如下例所示: