国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 開(kāi)發(fā) > XML > 正文

COM+ Web 服務(wù):通過(guò)復(fù)選框路由到 XML Web Services(1) (微軟中國(guó))

2024-09-05 20:55:56
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
com+ web 服務(wù):通過(guò)復(fù)選框路由到 xml web services
john noss 和 jonathan hawkins
microsoft corporation
2001年11月

摘要:com+ web 服務(wù)新增了某些功能,可與 microsoft .net remoting 集成,并通過(guò) soap for com+ 組件實(shí)現(xiàn) xml web services 發(fā)布的復(fù)選框激活。本文通過(guò)幾個(gè)示例介紹基本的互操作性、配置以及托管和非托管 com+ 組件(在 microsoft windows .net server 和 microsoft windows xp professional 上作為 xml web services 發(fā)布)的部署。

目錄

  • 簡(jiǎn)介
  • 簡(jiǎn)單的已知對(duì)象 (wko) 示例
  • 簡(jiǎn)單的客戶端激活對(duì)象 (cao) 示例
  • 事務(wù)性組件示例
  • 一切才剛剛開(kāi)始

簡(jiǎn)介


com+ web 服務(wù)新增了某些功能,可與 microsoft .net remoting 集成,并通過(guò) soap for com+ 組件實(shí)現(xiàn) xml web services 發(fā)布的復(fù)選框激活。本文通過(guò)幾個(gè)示例介紹基本的互操作性、配置以及托管和非托管 com+ 組件(在 microsoft windows .net server 和 microsoft® windows® xp professional 上作為 xml web services 發(fā)布)的部署。還通過(guò)示例介紹了幾個(gè)新功能,使運(yùn)行 windows xp 的客戶端能夠訪問(wèn)遠(yuǎn)程服務(wù)器上的 xml web services。
當(dāng)開(kāi)發(fā)人員使用 .net remoting 和托管代碼來(lái)完善現(xiàn)有的非托管 com+ 服務(wù)器和客戶端代碼時(shí),這些功能可以幫助他們利用和簡(jiǎn)化遷移過(guò)程。在 .net 框架的測(cè)試階段,有許多用戶問(wèn)及如何配置 .net remoting 來(lái)進(jìn)行簡(jiǎn)單的跨計(jì)算機(jī)激活操作。com+ web 服務(wù)的解決方案是同時(shí)自動(dòng)配置服務(wù)器 (microsoft windows .net server) 和客戶端 (microsoft windows xp professional) 計(jì)算機(jī),使用 .net remoting 來(lái)提供 soap 以替代 dcom。
microsoft windows xp 和 microsoft .net 框架是本年度發(fā)布的兩個(gè)最重要的軟件。二者的目的都是為了簡(jiǎn)化過(guò)程并提高軟件開(kāi)發(fā)人員的能力,因此利用這兩種產(chǎn)品并發(fā)揮各自優(yōu)勢(shì)來(lái)提供一套集成的、易于使用的解決方案就成為自然之選。com+ web 服務(wù)提供了一種簡(jiǎn)單的方法,可以將 com+ 組件發(fā)布為 xml web services ;還提供了新的集成功能,用于從客戶端計(jì)算機(jī)訪問(wèn) xml web services。從以下 microsoft visual basic scripting edition (vbscript) 示例中可以了解其易于使用的特點(diǎn),該示例用于確定 alaska 的 fairbanks 的當(dāng)前氣溫。請(qǐng)?jiān)?windows xp(已安裝 .net 框架)或 windows .net server 上運(yùn)行此示例:
set soapobj = getobject   ("soap:wsdl=http://www.xmethods.net/sd/temperatureservice.wsdl")wscript.echo "fairbanks 氣溫 = " & soapobj.gettemp("99707")

在上面的示例中,服務(wù)器是在 linux 上運(yùn)行的 apache soap server,但也可以使用任何具有標(biāo)準(zhǔn) web 服務(wù)說(shuō)明語(yǔ)言 (wsdl) 描述功能的 soap v1.1 服務(wù)器。
注意: 如果出現(xiàn)“未找到服務(wù)器”錯(cuò)誤,您需要在控制面板的 internet 選項(xiàng)中手動(dòng)配置防火墻設(shè)置。

使用 soap 作為計(jì)算機(jī)之間通信協(xié)議的優(yōu)點(diǎn)之一,在于它增加了可以交互操作的計(jì)算機(jī)的種類。.net remoting 具有以下兩種基本操作模型:
  • 已知對(duì)象 (wko): wko 是 soap v1.1 所支持的最常見(jiàn)的 xml web services 模型。它允許與其他運(yùn)行 soap v1.1 兼容堆棧的計(jì)算機(jī)協(xié)同工作。服務(wù)器和客戶端可以是運(yùn)行 apache soap 的非 windows 服務(wù)器和運(yùn)行 pocketsoap 的 pocket pc,也可以是基于 windows 的服務(wù)器和客戶端。唯一的要求是服務(wù)器上必須安裝了與 wsdl 1.1 版本兼容的描述功能,以便生成相應(yīng)的代理。此代理是在運(yùn)行時(shí)生成的,并且第一次使用 wsdl 名字對(duì)象時(shí)沒(méi)有用戶介入。
  • 客戶端激活的對(duì)象 (cao): cao 提供了更豐富的開(kāi)發(fā)環(huán)境,包括穩(wěn)定持久的連接。較之典型的 xml web services 模型,它更類似于 dcom 模型,但要求在服務(wù)器和客戶端上都安裝有某一版本的 .net 框架。

com+ web 服務(wù)可以使用 wko 和 cao 兩種激活模型,而且所有的服務(wù)器應(yīng)用程序都可以提供 wko 和 cao 端點(diǎn)。通過(guò)組合使用激活模型、xml web services 和 .net remoting,開(kāi)發(fā)人員可以輕松地組合和匹配托管及非托管的客戶端和服務(wù)器。下表所示為兩種激活模型所支持方案的示例。
表 1:wko 模型支持的方案wko 客戶端wko 服務(wù)器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 服務(wù)器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 服務(wù)適用于以下用戶:
  1. 當(dāng)前安裝有 microsoft® visual basic® 6.0 或者非托管 microsoft visual c++® com+ 應(yīng)用程序(需要通過(guò)防火墻才能進(jìn)行某些激活操作)的 com+ 用戶。(使用 soap 并不排斥通過(guò) dcom 訪問(wèn)服務(wù)器上的相同組件,客戶端計(jì)算機(jī)可以選擇協(xié)議。)對(duì)于這些客戶來(lái)說(shuō),如果要使用 soap 而不是 dcom,則使用客戶端代理導(dǎo)出和 cao 模型都不需要更改客戶端和服務(wù)器應(yīng)用程序。只需要在服務(wù)器應(yīng)用程序上啟用 soap,將其作為客戶端代理導(dǎo)出,然后將代理安裝在要用作 soap 客戶端的 windows xp 計(jì)算機(jī)上。
  2. 完全遷移到 windows xp 和 windows .net server 上的托管代碼的公司。com+ web 服務(wù)有助于在連接的兩端設(shè)置遠(yuǎn)程端點(diǎn)。
  3. 需要在上述兩種方案中組合和匹配各種服務(wù)的開(kāi)發(fā)人員,以及編寫(xiě)托管服務(wù)器組件、或帶有非托管服務(wù)器組件的托管客戶端應(yīng)用程序的開(kāi)發(fā)人員。在第二種情況中,開(kāi)發(fā)人員可以利用 com+ web 服務(wù),在用托管代碼替換之前充分利用早期的非托管組件。

簡(jiǎn)單的已知對(duì)象 (wko) 示例


除了對(duì) linux 和 apachein 提供 soap 支持外,將 com+ web 服務(wù)應(yīng)用于其他 microsoft 產(chǎn)品(例如 atl server web 服務(wù))也非常簡(jiǎn)單。只需使用 microsoft visual studio® .net 在服務(wù)器上生成、編譯和部署默認(rèn)的 atl web 服務(wù)即可。對(duì)它進(jìn)行訪問(wèn)的客戶端代碼如下(請(qǐng)用駐留 atl server 應(yīng)用程序的 web 服務(wù)器名稱替換 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 服務(wù)") 

上述示例簡(jiǎn)單說(shuō)明了 microsoft windows xp 和 microsoft windows .net 服務(wù)器所包含的一個(gè)新的 soap 名字對(duì)象。

數(shù)據(jù)發(fā)布


如果您只想提供數(shù)據(jù)而不是使用數(shù)據(jù),那么只需選擇一個(gè)復(fù)選框,然后輸入 iis 虛擬根名稱的值。要?jiǎng)?chuàng)建完整的 com+ web 服務(wù),請(qǐng)執(zhí)行以下步驟:
使用 visual basic 6.0 創(chuàng)建簡(jiǎn)單的 microsoft activex® dll,并輸入以下代碼:
function add(byval value1 as double, byval value2 as double) as double add = value1 + value2end function

在 visual basic 項(xiàng)目屬性頁(yè)上的 general選項(xiàng)卡中,設(shè)置 unattended executionretained in memory,并在 component 選項(xiàng)卡中選擇 remote server files。使用 visual basic 開(kāi)發(fā)環(huán)境生成此 dll。
在創(chuàng)建 visual basic 應(yīng)用程序之后,需要將其注冊(cè)為 com+ 應(yīng)用程序。啟動(dòng)組件服務(wù)管理工具,在 windows xp 上創(chuàng)建 com+ 應(yīng)用程序。(在此示例中,應(yīng)用程序被命名為 vb6soap。)將所創(chuàng)建的 dll 作為組件導(dǎo)入,然后瀏覽到 com+ 應(yīng)用程序?qū)傩皂?yè)的 activation 選項(xiàng)卡,選擇 uses soap,輸入一個(gè) soap vroot(例如,vb6soap),然后單擊 ok(如圖 1 所示)。

圖 1:vb6soap com+ 應(yīng)用程序?qū)傩皂?yè)
現(xiàn)在,應(yīng)用程序已發(fā)布為 xml web services,并且可以使用 soap 激活。使用 internet explorer 瀏覽到 http://localhost/vb6soap/default.aspx,您會(huì)在該 aspx 頁(yè)上發(fā)現(xiàn)一個(gè)超鏈接,通過(guò)它可以鏈接到您的組件所生成的 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 

如果用您的服務(wù)器名稱替換上面腳本中的 localhost,它也可以在遠(yuǎn)程客戶端計(jì)算機(jī)上正常工作。引用的頁(yè)面(在此示例中為 vb6soap.calc.soap)是以 .soap 后綴結(jié)尾的組件 progid。
要通過(guò) soap toolkit(與 windows xp professional 一起提供,并且不使用 .net remoting)訪問(wèn)同一端點(diǎn),請(qǐng)運(yùn)行以下 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 

要簡(jiǎn)化在服務(wù)器上發(fā)布 soap 的過(guò)程,您可以使用 microsoft c#™ 或 visual basic .net,并從 servicedcomponent 繼承。下面是簡(jiǎn)單托管組件的托管代碼示例:
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# 組件,將它安裝在全局程序集緩存中,然后運(yùn)行 regsvcs.exe 將它注冊(cè)為 com+ 應(yīng)用程序。這樣,該組件就被發(fā)布為 iis 虛擬根和 soap 端點(diǎn)。要成功地遠(yuǎn)程使用 servicedcomponent,還需要使用 gacutil.exe 或 .net 框架用戶界面,將這個(gè)編譯后的程序集放入全局程序集緩存 (gac) 中。要通過(guò) wsdl 訪問(wèn)此 soap 端點(diǎn),請(qǐng)使用以下 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 交互操作性的簡(jiǎn)單示例,soap toolkit 與 windows xp professional 一起提供,并且即使運(yùn)行 windows xp 的客戶端計(jì)算機(jī)上沒(méi)有安裝 .net 框架,使用以下 vbscript 也可以訪問(wèn) com+ soap 端點(diǎn):
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 

為簡(jiǎn)單起見(jiàn),上述示例全部使用 vbscript 來(lái)訪問(wèn) web 服務(wù)。其實(shí)也可以通過(guò) soap wsdl 名字對(duì)象使用 visual c+、visual basic 6.0、visual basic .net 或 c# 進(jìn)行編寫(xiě)。例如,visual basic .net 也可以使用編譯的托管代碼訪問(wèn)同一對(duì)象,如下例所示:
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 是為了表明,托管的和非托管的客戶端都可以訪問(wèn)發(fā)布為 com+ web 服務(wù)的 com+ 組件。在大型組織或應(yīng)用程序中,很難一次轉(zhuǎn)換所有部分,com+ web 服務(wù)允許將一部分應(yīng)用程序轉(zhuǎn)換為托管代碼,而無(wú)需立即全面重新編寫(xiě)現(xiàn)有的應(yīng)用程序。

簡(jiǎn)單的客戶端激活對(duì)象 (cao) 示例


服務(wù)器上的 com+ web 服務(wù)發(fā)布將每一組件發(fā)布為 wko 和 cao 兩種形式,因此不需要額外的服務(wù)器配置。在服務(wù)器上唯一要做的操作是,在選擇 uses soap 復(fù)選框(位于 com+ 應(yīng)用程序?qū)傩皂?yè)的 activation 選項(xiàng)卡上)并在 soap vroot 文本框中輸入值以后,將 com+ 應(yīng)用程序作為代理程序?qū)С觥O旅骘@示了導(dǎo)出代理應(yīng)用程序的必要步驟:
  1. 用鼠標(biāo)右鍵單擊組件服務(wù)管理工具中的 vb6soap com+ 應(yīng)用程序,并選擇 export,如圖 2 所示。

    圖 2:組件服務(wù)管理工具
  2. 在圖 3 所示的 com+ 應(yīng)用程序?qū)С鱿驅(qū)е校斎氪?.msi 文件的位置和名稱。

    圖 3:com+ 應(yīng)用程序?qū)С鱿驅(qū)?/b>
  3. 將代理 .msi 文件安裝在單獨(dú)的客戶端計(jì)算機(jī)上,作為預(yù)先生成的 com+ 應(yīng)用程序。
    安裝時(shí)將對(duì)代理進(jìn)行適當(dāng)?shù)呐渲茫员阃ㄟ^(guò) soap 訪問(wèn)正確的服務(wù)器和虛擬根。對(duì)于客戶端激活,可以不使用 wsdl 名字對(duì)象,而使用常規(guī)非托管的 com+ 激活(例如,cocreateinstancecreateobject 等)。在服務(wù)器上創(chuàng)建并在單獨(dú)的客戶端計(jì)算機(jī)上安裝上述 visual basic 計(jì)算器示例的應(yīng)用程序代理后,以下 vbscript 將通過(guò) soap 訪問(wèn)該服務(wù)器:
    set c = createobject("vb6soap.calc")for i = 1 to 10 wscript.echo i & " " & c.add(i,i) & " " & timenext 

    如果代理程序沒(méi)有啟用 com+ web 服務(wù),則上述 vbscript 代碼將使用 dcom 訪問(wèn)服務(wù)器應(yīng)用程序。
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 邹平县| 措勤县| 滦平县| 香港 | 开鲁县| 易门县| 天津市| 申扎县| 潼关县| 监利县| 南溪县| 宣化县| 哈巴河县| 子长县| 崇信县| 密云县| 宣武区| 瑞丽市| 株洲市| 城固县| 册亨县| 闽清县| 孙吴县| 泽州县| 和龙市| 弥勒县| 彭泽县| 周至县| 合山市| 盐边县| 威宁| 洛南县| 闽清县| 蕉岭县| 贵德县| 德令哈市| 武夷山市| 施甸县| 扎赉特旗| 井冈山市| 盱眙县|