版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第3章面向服務(wù)軟件開發(fā)概要3.1面向服務(wù)的軟件開發(fā)環(huán)境綜述
3.2服務(wù)提供商:創(chuàng)建和托管服務(wù)
3.3服務(wù)中介:服務(wù)的發(fā)布和發(fā)現(xiàn)
3.4SOAP3.5WSDL:Web服務(wù)描述語言
3.6服務(wù)請求者:用服務(wù)構(gòu)建應(yīng)用
3.7基于Java的Web服務(wù)開發(fā)
3.8討論
到現(xiàn)在為止,我們有可能掌握了SOC的主要概念和技術(shù),而沒有實際開發(fā)SOC軟件,如果我們?nèi)ラ_發(fā)SOC軟件,即使只是創(chuàng)建合成的服務(wù)和應(yīng)用,也會發(fā)現(xiàn)實際開發(fā)和理論的巨大差別。面向服務(wù)軟件開發(fā)概要本章將重點介紹如何使用工具開發(fā)SOC軟件,而不涉及底層語言、協(xié)議和標準,因此主要負責(zé)大型編程的軟件工程師和項目經(jīng)理能夠理解本章。本章的目的是讓讀者通過有限的編碼深刻理解相關(guān)的概念和技術(shù)。如果你是一位經(jīng)驗豐富的程序員,你可以在學(xué)習(xí)完本章之后,用相關(guān)的概念、技術(shù)和資源開發(fā)實際的應(yīng)用。
本章把主要概念、技術(shù)和工具結(jié)合在一起,展示如何一步一步創(chuàng)建Web服務(wù),發(fā)布服務(wù)并組合成SOC應(yīng)用。本章的結(jié)構(gòu)如下:3.1節(jié)概述了不同的SOC軟件開發(fā)環(huán)境;3.2節(jié)研究如何使用C#和ASP.Net創(chuàng)建具有標準接口的與平臺無關(guān)的Web服務(wù),還討論了不同的服務(wù)托管機制,以及如何使用Internet信息服務(wù)(IIS)托管服務(wù);3.3節(jié)探討了應(yīng)用共有的UDDI、ebXML以及其他服務(wù)目錄和注冊中心發(fā)布和發(fā)現(xiàn)服務(wù);3.4節(jié)討論用我們自己的服務(wù)以及通過公有服務(wù)目錄發(fā)現(xiàn)的服務(wù)構(gòu)建虛擬應(yīng)用和真實應(yīng)用;最后,在3.5節(jié),我們解釋了如何使用Java和Eclipse開發(fā)環(huán)境創(chuàng)建Web服務(wù)。
許多面向服務(wù)的軟件開發(fā)環(huán)境都可用于創(chuàng)建Web服務(wù)、服務(wù)目錄以及使用現(xiàn)有服務(wù)構(gòu)建應(yīng)用。表3.1列出了一些這樣的開發(fā)環(huán)境,其特點以及這些環(huán)境中使用的主要語言。表中前五個開發(fā)環(huán)境來自微軟,其他的開發(fā)環(huán)境來自Java和BPEL社區(qū),包括IBM、Oracle
、SunMicrosystems。3.1面向服務(wù)的軟件開發(fā)環(huán)境綜述
表3.1面向服務(wù)的軟件開發(fā)環(huán)境續(xù)表
與平臺無關(guān)的Web服務(wù)是SOC應(yīng)用的基石,并得到大部分環(huán)境的支持。
如果應(yīng)用僅限于一個平臺,則與平臺相關(guān)的服務(wù)就是更合理的選擇,例如.Net或JEE。在這種情況下,沒有不同接口之間的轉(zhuǎn)換,與開發(fā)平臺相關(guān)的服務(wù)更有效率。.Net的遠程調(diào)用就是為了滿足上述目標而設(shè)計的。JEE既可用于開發(fā)標準的Web服務(wù),也可用于開發(fā)Java相關(guān)的組件,例如JavaBeans。
分布式事務(wù)確保了兩個商業(yè)伙伴間的事務(wù),比如從一個賬戶到另一個賬戶的轉(zhuǎn)帳事務(wù),或者能順利完成,或者當事務(wù)失敗時不做任何更改。在事務(wù)處理中,回滾通常用于從失效中恢復(fù)。
WS
*規(guī)范包括許多可信性標準,例如WS
Security和WS
Reliable消息。
這些環(huán)境支持的特征是不斷演化的,新的特征不斷地添加到環(huán)境中。因此,表3.1沒有給出環(huán)境支持的所有特征。
在.Net2008中,WCF(Windows通信基礎(chǔ))是微軟的一個支持所有特征的包容環(huán)境。但是,如果主要關(guān)注與平臺無關(guān)的Web服務(wù)和應(yīng)用的開發(fā),則使用ASP.Net更簡單、更容易。在本章的剩余部分,我們將用ASP.Net開發(fā)與平臺無關(guān)的Web服務(wù)(作為一個服務(wù)提供者),討論支持服務(wù)發(fā)布和發(fā)現(xiàn)的服務(wù)中介,研究用與平臺無關(guān)的Web服務(wù)構(gòu)建基于ASP.Net的應(yīng)用。最后簡要討論基于Java的Web服務(wù)開發(fā)環(huán)境。
基于BPEL的SOC軟件開發(fā)和開發(fā)環(huán)境將在后面的章節(jié)研究。
Web服務(wù)是平臺無關(guān)的。但是,執(zhí)行實際計算(工作)的服務(wù)軟件必須用特定的編程語言編寫。換句話說,Web服務(wù)是一個接口,它把用標準服務(wù)描述語言(例如,WSDL)描述的服務(wù)調(diào)用(遠程調(diào)用)轉(zhuǎn)換為編寫服務(wù)軟件的編程語言的函數(shù)調(diào)用(例如,C?;騄ava),如圖3.1所示。3.2服務(wù)提供商:創(chuàng)建和托管服務(wù)
圖3.1服務(wù)調(diào)用轉(zhuǎn)換成函數(shù)調(diào)用
原則上,我們可以用標準的WSDL接口手工包裝任何函數(shù),這將在第5章中討論。本章使用工具自動生成XML格式的WSDL接口文件。這類似于寫一個網(wǎng)頁。你可以直接使用HTML語言寫網(wǎng)頁,也可以使用Web自動生成工具。
我們首先用C#和.Net開發(fā)Web服務(wù)。所需的系統(tǒng)和工具包括:
(1)操作系統(tǒng)??梢允褂孟铝胁僮飨到y(tǒng)之一:
①WindowsXP專業(yè)版;
②WindowsVista和7商業(yè)版;③Windows服務(wù)器2003、2008或更高版本;
④如果使用基于英特爾處理器的Mac,可以創(chuàng)建一個Windows分區(qū)。
(2)IIS(Internet信息服務(wù)),這是WindowsXP的一個可選組件。如果你沒有安裝,則需要添加這個組件。在Vista和7中,IIS是自動安裝的,但是,需要按以下步驟打開它:
①打開控制面板,選擇“程序”;
②選擇“程序和特征”;
③在左邊的菜單中選擇“打開或關(guān)閉Windows特征”;
④打開IIS。
一旦安裝了IIS,你應(yīng)該會看到一個名為inetpub的文件目錄。在inetpub中有一個名為wwwroot的子目錄,它是計算機上托管你創(chuàng)建的Web服務(wù)的小型服務(wù)器。也可以在wwwroot目錄下創(chuàng)建一個虛擬目錄,該虛擬目錄和保存你的Web服務(wù)可執(zhí)行代碼的物理目錄相連接。
(3)VisualStudio.Net專業(yè)版2005或2008,也可以使用.NetC#速成版,可以在微軟的網(wǎng)站/vstudio/express/免費下載。請注意,如果使用XP,在安裝.Net之前必須安裝IIS。因為根據(jù)計算機是否正在運行IIS,.Net的配置將有所不同。3.2.1使用ASP.Net創(chuàng)建Web服務(wù)
ASP.Net是VisualStudio和.Net框架公共語言運行庫(CLR)內(nèi)置的編程模板,它用于在服務(wù)提供者的服務(wù)器站點創(chuàng)建單個的Web服務(wù),也可以在客戶端創(chuàng)建使用Web服務(wù)的Windows窗體應(yīng)用和Web應(yīng)用。ASP.Net的Web服務(wù)教程可以在網(wǎng)站http://www.asp.Net/下載。
類似于創(chuàng)建C++或C#編程項目(Chen,2006),可以按如下步驟創(chuàng)建一個C#和ASP.Net的Web服務(wù)模板:
(1)在VisualStudio.Net的“文件”菜單中選擇“新建”—“網(wǎng)站...”,打開一個對話窗口。
(2)選擇“ASP.NetWeb服務(wù)”作為模板。在對話窗口的下半部分,選擇你要用來開發(fā)服務(wù)的語言。我們可以使用VisualBasic、VisualC#和VisualJ#(Java)。在本節(jié)我們將使用C#。在對話窗口的下半部分,你可以選擇或輸入一個文件系統(tǒng)目錄(硬盤驅(qū)動器),用來存放開發(fā)的Web服務(wù)。例如,如果鍵入[C:\myService],開發(fā)的服務(wù)名為Service.asmx,則這個服務(wù)位于此目錄下。VisualStudio附帶了一個開發(fā)服務(wù)器,它允許你把服務(wù)放在任何地方并測試運行該服務(wù)。點擊確定,一個新的Web服務(wù)項目以及相關(guān)的一些文件將被創(chuàng)建。
(3)服務(wù)模板在Service.cs文件中給出,服務(wù)中HelloWorld()的[WebMethod]的示例代碼如下所示。
usingSystem;
usingSystem.Linq;
usingSystem.Web;
usingSystem.Web.Services;
usingSystem.Web.Services.Protocols;
usingSystem.Xml.Linq;
[WebService(Namespace="/")]
[WebServiceBinding(ConformsTo=WsiProfiles.BasicProfile11)]
//ToallowthisWebServicetobecalledfromscript,usingASP.NetAJAX,uncommentthefollowingline.
//[System.Web.Script.Services.ScriptService]
publicclassService:System.Web.Services.WebService
{
publicService(){
//Uncommentthefollowinglineifusingdesignedcomponents
//InitializeComponent();
}
[WebMethod]
publicstringHelloWorld(){
return"HelloWorld";
}
}
選擇.Net菜單命令“調(diào)試—不調(diào)試開始執(zhí)行”,將產(chǎn)生一個顯示服務(wù)的Web頁,如圖3.2所示。在地址部分,localhost:51783顯示了開發(fā)服務(wù)器中服務(wù)所在的位置。
圖3.2顯示服務(wù)的Web頁
你可以修改[WebMethod]實現(xiàn)自己的功能,或添加更多的Web方法實現(xiàn)更多的功能。一旦你在模板中添加了代碼,就可以使用VisualStudio提供的工具編譯/構(gòu)建項目、調(diào)試代碼、執(zhí)行代碼。最后一步將啟動Web服務(wù)。
你仍然必須手工編寫你的服務(wù)中的代碼以執(zhí)行服務(wù)所需的操作,例如執(zhí)行排序、加密、方程求解等等。然而,ASP.Net提供了一個帶有預(yù)定義名字空間和類的模板幫助用戶編寫Web服務(wù)中的操作。下面代碼顯示在模板中添加了兩個Web方法(突出顯示的
代碼
)。publicclassService:System.Web.Services.WebService
{
publicService(){
//Uncommentthefollowinglineifusingdesignedcomponents
//InitializeComponent();
}
[WebMethod]
publicstringHelloWorld(){
return"HelloWorld";
}
[WebMethod]//Thisismynewfunctiontoreturnpivalue
publicdoublePiValue()
{
doublepi=System.Math.PI;//calllibfunctionPI
return(pi);
}
[WebMethod]//Thisismynewfunctiontoreturnabsolutevalue
publicintabs(intx)
{
if(x>=0)return(x);
elsereturn(-x);
}
}
程序模板在開始列出了在Web服務(wù)中使用的名字空間。在這個例子中,不是所有列出的名字空間都是必要的。添加兩個操作后,這個Web服務(wù)有三種Web方法;如果它部署到能使用Web的服務(wù)器上,每種方法都提供了一個Web操作。這三個Web服務(wù)在Service類定義:
stringHelloWorld()服務(wù)簡單地返回一個字符串“HelloWorld”。
doublePiValue()服務(wù)返回一個表示pi的double值,例如,
3.14159265358979
。在C#中,pi值由System.Math.PI的庫函數(shù)計算。
intabs(intx)服務(wù)需要一個整數(shù)作為輸入值,并返回一個整型值,即x的絕對值。如果x為非負整數(shù),它返回x,否則,它返回-x。3.2.2使用WCF創(chuàng)建Web服務(wù)
WCF是在VisualStudio中新的服務(wù)的開發(fā)平臺。它提出了一種新的接口中定義的端點,其中包括地址,綁定和契約。
地址(Addressing):定義服務(wù)的網(wǎng)絡(luò)地址,例如,http://www.webservicex.Net/uszip.svc或http://localhost:49187/Service.svc。
綁定(Binding):定義連接客戶端和服務(wù)端之間,或兩個服務(wù)之間的端點之間的通道。
契約(Contract):有不同類型的契約,服務(wù)契約定義了一個接口。該接口將被實現(xiàn)為一個類。操作契約定義了一個接口或端點。該端點將被實現(xiàn)為類的一個方法。數(shù)據(jù)契約定義將傳入和傳出服務(wù)操作的數(shù)據(jù)類型,這是傳入的參數(shù)和返回值的方法的簽名。
為了讓我們把重點放在創(chuàng)建服務(wù)和托管服務(wù)的過程中,我們在此使用一個簡單的猜數(shù)服務(wù)為例子。該服務(wù)定義了兩個操作:返回所給區(qū)間中的一個隨機暗碼值和返回驗證用戶猜測的結(jié)果值。客戶端將創(chuàng)建一個服務(wù)的代理和使用代理訪問服務(wù)的操作。下面是創(chuàng)建該服務(wù)和調(diào)用該服務(wù)的客戶程序。
第1步:新建一個WCFWeb站點項目
通過選擇文件→新建Web站點→WCF服務(wù),新建一個Web站點項目。為了更好地仿照這個例子,我們使用默認的存儲位置,但是要改變WCFService存儲路徑末尾的文件夾名稱。
項目的解決方案同時被創(chuàng)建。在項目下面,你將看到兩個C#文件:IService.cs和Service.cs。打開這兩個文件中的一個,你可以看到一個代碼模板。
第2步:添加System.ServiceModel名字空間
我們需要名字空間System.ServiceModel中的一組庫函數(shù)。此名字空間在VisualStudio2008默認條件下不被自動加載。我們在這一步添加此名字空間。
在解決方案資源管理器中,右鍵單擊項目文件夾下的引用文件夾并選擇“添加引用”,在添加引用對話框中選擇.Net標簽,然后向下滾動直到看到System.ServiceModel。選中它,并點擊確定。
如果使用VisualStudio2010,這一步可省去。
第3步:定義服務(wù)契約
打開IService.cs文件,用下面的代碼替換模板中給定的代碼。
[ServiceContract]
publicinterfaceIService{
[OperationContract]
intsecretNumber(intlower,intupper);
[OperationContract]
stringcheckNumber(intuserNum,intsecretNum);
//TODO:AddyourserviceoperationshereorinService.csfile
}
從代碼中可以看到,我們定義了兩個簡單操作的接口:返回所給區(qū)間的暗碼值和返回驗證結(jié)果值。
第4步:服務(wù)契約的實現(xiàn)
現(xiàn)在,我們將實現(xiàn)上一步中定義的接口。打開Service.cs文件,用下面的代碼替換模板中的代碼。該程序使用隨機數(shù)來產(chǎn)生暗碼值。
publicclassService:IService{
publicintsecretNumber(intlower,intupper){
DateTimecurrentDate=DateTime.Now;
intseed=(int)currentDate.Ticks;
Randomrandom=newRandom(seed);
intsNumber=random.Next(lower,upper);
returnsNumber;
}
publicstringcheckNumber(intuserNum,intsecretNum){
if(userNum==secretNum)
return"correct,congratulation!";
else
if(userNum>secretNum)
return"toobig";
elsereturn"toosmall";
}
}
第5步:構(gòu)建并在瀏覽器中查看編譯后的服務(wù)
構(gòu)建(build)之后,右鍵單擊Service.svc文件并選擇“在瀏覽器中查看”,將生成一個服務(wù)網(wǎng)頁,如圖3.3所示。注意,ASP.Net服務(wù)的擴展名為.asmx,而WCF服務(wù)的擴展名為.svc。與ASP.Net服務(wù)不同,這里不生成測試頁。我們必須編寫一個客戶端應(yīng)用程序來測試這個服務(wù)。該服務(wù)已經(jīng)發(fā)布到以下地址:
/WSRepository/Services/NumberGuess/Service.svc
圖3.3生成的服務(wù)網(wǎng)頁
點擊本地服務(wù)鏈接http://localhost:55143/NumberGuess/Service.svc?wsdl,或發(fā)布的服務(wù)鏈/WSRepository/Services/NumberGuess/Service.svc?wsdl我們將看到此服務(wù)的WSDL文件。ASP.Net服務(wù)和WCF服務(wù)使用相同的WSDL服務(wù)接口標準。
但是WCF服務(wù)的WSDL文件比ASP.Net服務(wù)的WSDL文件包含的信息更多。正如前面章節(jié)中討論的,在客戶端應(yīng)用程序使用ASP.Net服務(wù),選擇添加Web引用(AddWebReference)。如果使用WCF服務(wù),選擇添加服務(wù)引用(AddServiceReference)。我們將用下面的例子來討論如何使用WCF服務(wù)。
第6步:用客戶端應(yīng)用程序測試WCF服務(wù)
這里,我們將用一個圖形界面來實現(xiàn)一個猜數(shù)游戲的客戶端Web應(yīng)用程序。該程序?qū)⑹褂靡呀?jīng)開發(fā)好的猜數(shù)字服務(wù)來完成其功能。Web應(yīng)用程序的界面如下圖所示。游戲用戶可輸入暗碼值的區(qū)間。然后,輸入和提交猜數(shù)。如圖3.4所示。
圖3.4猜數(shù)游戲的界面
我們將使用Windows格式應(yīng)用(WindowsFormsApplication)模板來實現(xiàn)這個界面。
我們可以在同一解決方案中加新項目:右鍵單擊當前資源管理器中的解決方案,選擇“添加”,然后選“新建項目”。如下圖所示,在添加新項目對話框中,選擇C#。選擇我們將使用Web格式應(yīng)用(WebForms)模板。生成的解決方案資源管理器中的Default.aspx文件將用來設(shè)計用戶界面。Default.aspx.cs文件將包含執(zhí)行用戶界面功能的C#代碼。如圖3.5所示。
圖3.5添加新項目的界面
另一種方法是,重新建立一個解決方案:通過選擇文件→新建項目→ANP.NetWeb應(yīng)用,如圖3.6所示。
圖3.6重新建立解決方案的界面
項目建好后,我們需要添加把猜數(shù)服務(wù)添加進來。右鍵單擊NumberGuessClient項目,選擇“添加服務(wù)引用”,注意添加WCF服務(wù)使用“添加服務(wù)引用”,而添加ASP.Net服務(wù)則使用“添加Web引用”。從下圖中我們可以發(fā)現(xiàn)WCF服務(wù)的地址是:/WSRepository/Services/NumberGuess/Service.svc。我們也可以用本地服務(wù)地址http://localhost:55143/NumberGuess/Service.svc。
圖中顯示了添加服務(wù)引用的對話框窗口和服務(wù)的操作。我們把服務(wù)的代理命名為ProxyToGuessService。3.2.3測試Web服務(wù)
一旦在C#程序模板中添加了所有服務(wù)方法,就可以在.Net菜單中選擇build(編譯),然后用開始(不調(diào)試)菜單執(zhí)行程序。
當程序執(zhí)行時,它會立即啟動.Net開發(fā)服務(wù)器的Web服務(wù)。一個封裝你的服務(wù)并用于測試的網(wǎng)頁將被創(chuàng)建,如圖3.7所示。
圖3.7在.Net開發(fā)服務(wù)器中啟動Web服務(wù)
點擊一個服務(wù),服務(wù)后的函數(shù)將被遠程調(diào)用。例如,如果點擊abs,就要求在輸入面板中輸入一個值作為參數(shù),如圖3.8左部分所示。例如輸入值-1802,輸入之后點擊右下方的“Invoke”,Web服務(wù)abs將被遠程調(diào)用。返回值將顯示在另外的一個網(wǎng)頁上,如圖3.8右部分所示,返回值1802被封裝在XML文本中。
雖然Web服務(wù)的返回值是可讀的,但它的目的是讓其他應(yīng)用程序讀取,而這個應(yīng)用程序以更人性化的界面顯示不同的值。圖3.7中的Web頁是測試模式。一旦服務(wù)部署在服務(wù)器上,Web服務(wù)只能通過它們的編程接口訪問。圖3.8從Web瀏覽器中輸入?yún)?shù)值3.2.4作為服務(wù)提供商托管Web服務(wù)
有三種不同的方式托管服務(wù),并允許遠程訪問Windows環(huán)境下創(chuàng)建的服務(wù):.Net開發(fā)服務(wù)器、Windows下的IIS和Web服務(wù)器。
1..Net開發(fā)服務(wù)器
.Net包括一個開發(fā)服務(wù)器,它允許在同一臺計算機上測試并訪問Web服務(wù),而無需連接互聯(lián)網(wǎng)或者安裝IIS。事實上,上一節(jié)所討論的例子就是運行在.Net開發(fā)服務(wù)器上的。如果把圖3.2所示的Web地址(http://localhost:51783/myService/Service.asmx)復(fù)制到運行在同一臺計算機上的應(yīng)用程序中,則可以在應(yīng)用中訪問服務(wù)。3.4節(jié)將討論在應(yīng)用程序中訪問Web服務(wù)。
2.Windows下的IIS
IIS可以將計算機上的任何一個文件夾(目錄)作為服務(wù)器。除了文件夾“C:\inetpub\wwwroot\”外,可以在IIS中創(chuàng)建虛擬目錄(別名)并將其鏈接到文件系統(tǒng)中的任何一個物理目錄上。一旦服務(wù)在wwwroot目錄下或在IIS虛擬目錄下,就可以用你的計算機IP地址取代IIS服務(wù)器創(chuàng)建的Web地址的“l(fā)ocalhost”部分,從而獲得服務(wù)的完整的Web地址。例如,如果你的計算機的IP地址是“07”,則服務(wù)的完整的Web地址就是:07/myService/Service.asmx。
3.Web服務(wù)器或Windows服務(wù)器
如果正在服務(wù)器(例如WindowsServer2008)上開發(fā)Web或Windows服務(wù),當按照3.2.3節(jié)所述步驟測試服務(wù)時,圖3.7所示的窗口中將會創(chuàng)建完整的Web地址。
在大多數(shù)Web服務(wù)器上,IIS是一個服務(wù)運行環(huán)境。它可以安裝在Windows操作系統(tǒng)中,使得部分文件系統(tǒng)成為服務(wù)器。IIS一直在運行,監(jiān)聽請求并處理請求排隊。當遠程客戶激活服務(wù)器上的服務(wù)時,IIS把遠程客戶端的請求重定向到它托管下的正確服務(wù)上。IIS管理服務(wù)之間的共享資源。IIS使用安全套接字(SSL)驗證遠程調(diào)用者并保障服務(wù)器上數(shù)據(jù)的安全。
如果使用WindowsXP,IIS是可選的,需要插入XP光盤,并選擇添加可選組件添加IIS。如果使用更高版本的Windows(Vista和7),IIS已安裝,但還是需要按照以下步驟打開它:打開“控制面板”,選擇“程序”,然后選擇“程序和特征”,在窗口左側(cè)的任務(wù)列表中點擊“打開或關(guān)閉Windows特征”,然后就可以使用Web管理工具了。
當安裝或打開IIS之后,會看到目錄C:\inetpub\wwwroot\。要測試IIS是否正常工作,可以復(fù)制文件夾“myService”到C:\inetpub\wwwroot\],然后復(fù)制http://localhost/myService/Service.asmx到Web瀏覽器訪問服務(wù)。注意.Net開發(fā)服務(wù)器的地址和IIS之間的區(qū)別:IIS的地址不包含“l(fā)ocalhost”后面的數(shù)字。
下一步,我們將研究如何創(chuàng)建一個虛擬目錄,使選擇的物理目錄成為一個Web服務(wù)器。
為了更好地組織文件和程序,不能把所有的服務(wù)都部署到C:\inetpub\wwwroot\。相反,如果使用WindowsXP,則可以按照以下步驟創(chuàng)建IIS虛擬目錄:
(1)定位/決定服務(wù)(由VisualStudio創(chuàng)建)放在什么地方。假設(shè)包含服務(wù)的物理目錄是C:\myService。
(2)使用控制面板中的IIS配置管理器創(chuàng)建一個命名的虛擬目錄(別名)。例如,使用下面的步驟將“myIisService”鏈接到“myService”:①打開你計算機上的“控制面板”。
②打開“系統(tǒng)管理工具“。
③打開Internet信息服務(wù)。
④鼠標右鍵點擊“缺省Web站點”,選擇“新建”,然后選擇“虛擬目錄…”。
⑤輸入虛擬目錄的名稱,將其命名為myIisServce。
⑥指定虛擬目錄鏈接到的物理目錄。你可以通過瀏覽選擇目錄C:\myService。
⑦在完成上述步驟后,會看到IIS的默認Web站點myIisService。右鍵單擊myIis
Service
,并選擇“轉(zhuǎn)換到應(yīng)用”。此步驟將服務(wù)注冊到IISWeb管理服務(wù)(WAS),它列出IIS服務(wù)目錄下的服務(wù)。⑧為Web站點客戶選擇權(quán)限,至少應(yīng)設(shè)置讀的權(quán)限。為了使網(wǎng)頁中嵌入的腳本可運行,就要允許客戶在你的站點運行腳本,穩(wěn)定性問題將在以后的章節(jié)中討論。
(3)現(xiàn)在,目錄C:\myService中的所有信息在互聯(lián)網(wǎng)上可見。如果你想改變虛擬目錄的設(shè)置和屬性,右擊“myIisServce”然后選擇“屬性”。
請注意,如果計算機設(shè)置了防火墻,對于外部訪問,管理員須打開防火墻的HTTP端口。
在創(chuàng)建一個虛擬目錄和注冊(轉(zhuǎn)換為應(yīng)用程序)之后,就可以通過地址:http://localhost/myIisServce/service.asmx訪問服務(wù)。用計算機的IP地址取代“l(fā)ocalhost”,這將允許其他計算機通過互聯(lián)網(wǎng)訪問服務(wù)。可以按照下列步驟在已有的虛擬目錄中發(fā)布服務(wù):
①在成功地構(gòu)建一個Web服務(wù)項目后,不要選擇執(zhí)行項目,而是在.Net菜單命令中選擇“發(fā)布Web站點”。
②然后,將打開一個對話窗,選擇計算機上的一個虛擬目錄托管服務(wù),例如,可以選擇你創(chuàng)建的目錄:C:\inetpub\wwwroot\myIisServce。③一旦Web站點發(fā)布,將打開一個地址為http://localhost/myIisServce/Service.asmx的網(wǎng)頁。
④用本地主機的IP地址取代“l(fā)ocalhost”,Web服務(wù)就有了URL,例如07/myIisServce/service.asmx將是該服務(wù)的URL。
上一節(jié)討論了服務(wù)提供者角色,它負責(zé)創(chuàng)建和托管服務(wù)。本節(jié)討論服務(wù)中介角色,它提供服務(wù)目錄并存儲服務(wù)。有三種服務(wù)中介:目錄服務(wù)、倉庫服務(wù)、特別服務(wù)列表,每種都包含服務(wù)中介所期望的部分功能,如圖3.9所示。3.3服務(wù)中介:服務(wù)的發(fā)布和發(fā)現(xiàn)
圖3.9三種不同的服務(wù)中介
UDDI和ebXML由OASIS(OrganizationfortheAdvancementofStructured
Information
Standards)定義,這是一個不以營利為目的,致力于電子商務(wù)標準的開發(fā)、融合、使用的國際協(xié)會。成員自己制定OASIS技術(shù)議程,以明確定義的輕量級的開放過程促進業(yè)界的共識和各方的統(tǒng)一。相比較于其他組織,該協(xié)會不僅制定了很多Web服務(wù)標準,而且在安全性標準、電子商務(wù)、公共部門的標準化工作以及特定應(yīng)用市場方面也做了很多工作。它成立于1993年,OASIS擁有來自600多個組織的3500多名會員,以及100多個國家的個人會員。
3.3.1具有全部所需特征的服務(wù)中介
為了更好地支持SOA軟件的開發(fā),本節(jié)討論服務(wù)中介應(yīng)具備的特征。
服務(wù)注冊:這是服務(wù)中介的基本功能,它允許服務(wù)提供者注冊他們服務(wù)的類型、描述、聯(lián)系信息、訪問點(如URL),并允許服務(wù)請求者基于他們擁有的部分信息發(fā)現(xiàn)想要的服務(wù)。
服務(wù)存儲:托管服務(wù)的執(zhí)行。為了支持大批量訪問,托管服務(wù)器必須具有超級計算能力和高速的互聯(lián)網(wǎng)連接。
服務(wù)規(guī)范和需求:如果某個服務(wù)請求者不能發(fā)現(xiàn)服務(wù),可以發(fā)布規(guī)范或需求,從而使服務(wù)提供者可以開發(fā)以滿足規(guī)范或需求的服務(wù)。服務(wù)需求使用自然語言書寫,而服務(wù)規(guī)范用規(guī)格語言或接口定義語言如WSDL編寫。
應(yīng)用模板:不僅是服務(wù),由多個服務(wù)和圖形用戶界面(GUI)組成的應(yīng)用也可以使用SOC范型。應(yīng)用模板指定了應(yīng)用的工作流、參與服務(wù)的描述、服務(wù)接受的標準以及應(yīng)用集成標準。應(yīng)用構(gòu)建者采用應(yīng)用模板開發(fā)應(yīng)用。
GUI模板:GUI是一個軟件產(chǎn)品成功的關(guān)鍵。GUI模板的發(fā)布可以幫助應(yīng)用構(gòu)建者通過使用現(xiàn)有的GUI設(shè)計創(chuàng)建用戶友好的高效率的GUI。
合作協(xié)議和模板:合作協(xié)議和模板定義了應(yīng)該用什么語言定義合作以及服務(wù)之間如何通信。合作協(xié)議和模板的發(fā)布規(guī)范了服務(wù)提供者如何定義應(yīng)用、GUI模板和服務(wù)接口。因為合作協(xié)議和模板提供了可重用的合作模式,這種模式可在應(yīng)用和服務(wù)開發(fā)中采用,因而縮短了開發(fā)周期。
策略:基于策略的計算建議把數(shù)據(jù)和計算分離。用來反映策略變化的數(shù)據(jù)項存儲在配置文件或策略數(shù)據(jù)庫中。策略的修改可以在運行時完成,無需中斷程序的執(zhí)行。為了重用,可以發(fā)布策略。另一方面,為了滿足對服務(wù)中介的動態(tài)需求,服務(wù)中介應(yīng)該用基于策略的計算實現(xiàn)。
數(shù)據(jù)庫和本體論:服務(wù)中介是一個為它的客戶提供各種不同服務(wù)的服務(wù)。為了存儲和管理大量數(shù)據(jù)和服務(wù),數(shù)據(jù)庫的支持是必不可少的。然而,傳統(tǒng)的數(shù)據(jù)庫并不足以支持服務(wù)中介,因為服務(wù)中介不僅需要檢索數(shù)據(jù),還要發(fā)現(xiàn)服務(wù)和應(yīng)用模板。自動發(fā)現(xiàn)服務(wù)和應(yīng)用模板是服務(wù)中介的需求。具有語義屬性和推理能力的本體可以擴展傳統(tǒng)數(shù)據(jù)庫的能力,更好地支持自動化的服務(wù)發(fā)現(xiàn)。
集成測試和評估工具:測試和評估,包括測試用例生成、測試結(jié)果(給定輸入的正確輸出)、驗證、確認、可靠性評估和安全性評估,都是軟件開發(fā)中的關(guān)鍵而又困難的步驟。服務(wù)中介可以提供工具,在綁定服務(wù)到應(yīng)用之前,幫助應(yīng)用構(gòu)建者測試服務(wù)。
服務(wù)質(zhì)量:服務(wù)中介可以跟蹤并保存服務(wù)的性能和可信性數(shù)據(jù)是一項期望的功能,這些數(shù)據(jù)包括響應(yīng)時間、吞吐量、可靠性、外部安全性以及成本效益。
理想情況下,用SOA實現(xiàn)服務(wù)中介,從而可以使服務(wù)中介動態(tài)擴展和重新組合。圖3.10是一個通用的服務(wù)中介的例子,它不僅允許規(guī)范、策略、服務(wù)和數(shù)據(jù)的發(fā)布,也允許中介的模型和工具的發(fā)布,例如可靠性評估工具、測試用例生成工具、排名工具。這樣,可以評估中介系統(tǒng)使用的工具,并且如果有更好的工具還可以淘汰已有工具。
圖3.10一個可擴展和再組合的服務(wù)中介
基于服務(wù)中介的特征,一個典型的SOA軟件開發(fā)過程如圖3.11所示。服務(wù)提供者可以通過服務(wù)中介了解需要哪些應(yīng)用、GUI和服務(wù),并就此開發(fā)和發(fā)布應(yīng)用模板、GUI和服務(wù)以滿足需求。服務(wù)提供者可以使用服務(wù)中介的測試工具測試服務(wù),選擇在服務(wù)中介或自己的服務(wù)器上托管服務(wù)。服務(wù)請求者或應(yīng)用構(gòu)建者可以簡單地發(fā)布他們的需求,查詢服務(wù)中介找到某些模板作為開發(fā)他們的需求、應(yīng)用模板和GUI的基礎(chǔ)。一旦完成了應(yīng)用和GUI模板,他們開始查詢所需的服務(wù),填充模板中所需的組件。
圖3.11圍繞服務(wù)中介的軟件開發(fā)過程
應(yīng)用構(gòu)建者(服務(wù)請求者)通過服務(wù)中介發(fā)現(xiàn)感興趣的服務(wù)。一旦發(fā)現(xiàn)服務(wù)的API(應(yīng)用編程接口),他們遠程調(diào)用這些服務(wù)。圖3.12是一個典型的服務(wù)請求者搜索服務(wù)的過程。功能需求封裝到SOAP包中,進一步封裝到HTTP包,然后發(fā)送給服務(wù)中介。服務(wù)中介拆封HTTP和SOAP包以獲取功能需求。通常情況下,它通過具有語義屬性的本體把需求和滿足需求的最適合的服務(wù)相匹配。服務(wù)中介把服務(wù)的API返回給服務(wù)請求者。
圖3.12服務(wù)請求者搜索服務(wù)的過程3.3.2UDDI服務(wù)注冊
統(tǒng)一描述、發(fā)現(xiàn)和集成協(xié)議(UDDI,TheUniversalDescription,Discovery,and
Integration
)是OASIS提出的標準,用于表示、模型化、發(fā)布Web服務(wù)(http://www.
)。UDDI最初由IBM、Ariba和Microsoft提出?,F(xiàn)在,已有300家公司參與,包括HP、Intel、Novell和SAP公司。UDDI基于已有的標準,包括XML、SOAP和WSDL。UDDI的主要功能是服務(wù)注冊,它的注冊信息大致分為三部分:
①白頁包括服務(wù)提供者的姓名、身份(例如,DUNS號)和聯(lián)系信息。②黃頁包括企業(yè)類型、產(chǎn)品和服務(wù)類型、地理位置。
③綠頁包括和服務(wù)相關(guān)的綁定信息、服務(wù)實現(xiàn)的技術(shù)參考模型、指向各種文件的指針以及基于URL的發(fā)現(xiàn)機制。程序可以搜索并解釋這些信息。
在數(shù)據(jù)組織層,UDDI注冊表的數(shù)據(jù)從概念上被劃分為五個數(shù)據(jù)模型,也稱為數(shù)據(jù)結(jié)構(gòu),每個表示了UDDI的一個實體。每個實體分配一個統(tǒng)一唯一標識符(UUID),通過以下標識符,在UDDI注冊表中總能找到這些實體。
businessEntity
businessService
bindingTemplate
tModel
publisherAssertion
前兩個條目分別是指白頁和黃頁,而第3和第4個條目與綠頁有關(guān)。然而,雖然電話號碼簿和UDDI條目在概念層類似,但在技術(shù)層,它們有很大區(qū)別。
我們給出每個數(shù)據(jù)結(jié)構(gòu)的成員以及它的XMLSchema定義。XMLSchema(XMLS)是用來定義其他語言的語法和數(shù)據(jù)結(jié)構(gòu)的語言。雖然XMLS將在下一章正式討論,這里給出的這些定義還是很容易理解的。
1.businessEntity
這個數(shù)據(jù)結(jié)構(gòu)包含公司自身(服務(wù)提供者)的信息,包括下列信息項:
公司的統(tǒng)一唯一標識符(可以有多個)(UUID),當公司在UDDI注冊時,分配這一標識。
公司W(wǎng)eb地址。
聯(lián)系信息。
產(chǎn)業(yè)類別。
提供的服務(wù)列表。
businessEntity的XMLS定義如下:
<elementname="businessEntity"type="uddi:businessEntity"/>
<complexTypename="businessEntity">
<attributename="businessKey"type="uddi:businessKey"use="required"/>
<attributename="operator"type="string"use="optional"/><attributename="authorizedName"type="string"use="optional"/>
<sequence>
<elementref="uddi:discoveryURLs"minOccurs="0"/>
<elementref="uddi:name"maxOccurs="unbounded"/>
<elementref="uddi:description"minOccurs="0"maxOccurs="unbounded"/>
<elementref="uddi:contacts"minOccurs="0"/>
<elementref="uddi:businessServices"minOccurs="0"/><elementref="uddi:identifierBag"minOccurs="0"/>
<elementref="uddi:categoryBag"minOccurs="0"/>
</sequence>
</complexType>
在上面定義的基礎(chǔ)上,給出一個數(shù)據(jù)項實例,定義如下:
<businessEntity
businessKey="uuid:B1D2A3B4-E445-4F32-75BA-67D123451C39"operator="/~ychen10/teaching/cse445/"
authorizedName=―CourseInstructor">
<name>ASUCSE445-598</name>
<description>WeprovidesampleservicesforSOCeducation</description>
<contacts>
<contactuseType="generalinformation">
<description>Email</description><personName>CourseInstructor</personName>
<phone>(480)9652769</phone>
<email>cse445598instructor@</email>
</contact>
<contactuseType="assignmentsandprojects">
<description>Email</description>
<personName>TeachingAssistant</personName>
<email>cse445598TA@</email>
</contact>
</contacts><businessServices>
SOCEducation,SOCsoftwaredevelopment,andSOCresearch
</businessServices>
<identifierBag>
<keyedReferencetModelKey=―uddi:02016094-9c03-47e9-a52b-1dec2d0c1454"name="D-U-N-S"value="913360445"/>
</identifierBag>
<categoryBag><keyedReferencetModelKey="UUID:C0B9FE13-179F-413D-8A5B-5004DB8E5BB2"name="NAICS"value=―246359"/>
</categoryBag>
</businessEntity>
2.businessService
businessService數(shù)據(jù)模型表示了服務(wù)提供者提供和發(fā)布的一個Web服務(wù)。統(tǒng)一唯一標識符(UUID)用于該項的businessKey和serviceKey屬性。根據(jù)UUID,所有UDDI注冊中心的每個業(yè)務(wù)實體和業(yè)務(wù)服務(wù)是唯一確定的,在信息首次進入時,這個UUID由注冊中心分配。bindingTemplates有一個引用,它保存與指定的業(yè)務(wù)服務(wù)相關(guān)聯(lián)的技術(shù)服務(wù)描述信息。這個數(shù)據(jù)結(jié)構(gòu)的XMLS定義和例子如下:
<elementname="businessService"type="uddi:businessService"/><complexTypename="businessService">
<attributename="serviceKey"type="uddi:serviceKey"use="required"/>
<attributename="businessKey"
type="uddi:businessKey"use="optional"/>
<sequence>
<elementref="uddi:name"minOccurs="0"maxOccurs="unbounded"/>
<elementref="uddi:description"minOccurs="0"maxOccurs="unbounded"/><elementref="uddi:bindingTemplates"minOccurs="0"/>
<elementref="uddi:categoryBag"minOccurs="0"/>
</sequence>
</complexType>
例子:
<businessServiceserviceKey="uuid:C0B9FE13-179F-413D-8A5B-5004DB8E5BB2businessKey="uuid:01F83FCE-54AC-4C39-B274-C4A390B8EE8C"><name>Array2String</name>
<description>
Convertanarrayoffloatsintoastring,andastringbackintoanarrayoffloats
</description>
<bindingTemplate>...</bindingTemplate>
<categoryBag>…</categoryBag>
</businessService>
3.bindingTemplate
bindingTemplate是businessService數(shù)據(jù)結(jié)構(gòu)表示的Web服務(wù)的技術(shù)描述。同一個Web服務(wù)有多個bindingTemplate。每個bindingTemplate表示了Web服務(wù)的實際實現(xiàn)。例如,可用不同的語言(Java和C#)實現(xiàn)相同的服務(wù)規(guī)范,從而更好地支持使用不同語言的應(yīng)用。雖然Web服務(wù)應(yīng)該是與語言無關(guān)的,但如果Web服務(wù)使用了特定語言的數(shù)據(jù)結(jié)構(gòu),應(yīng)用程序的語言就無法理解應(yīng)用中創(chuàng)建的代理。使用多個bindingTemplate的另一個動機是為了靈活性及可靠性,允許服務(wù)能夠綁定到不同的協(xié)議或不同的URL地址。例如,除了SOAP綁定,還可以使用MIME綁定(MIME:MultipurposeInternetMailExtension)。這個數(shù)據(jù)結(jié)構(gòu)的XMLS定義和例子如下:
<elementname="bindingTemplate"type="uddi:bindingTemplate"/>
<complexTypename="bindingTemplate">
<attributename="serviceKey"type="uddi:serviceKey"use="optional"/>
<attributename="bindingKey"type="uddi:bindingKey"use="required"/>
<sequence><elementref="uddi:description"minOccurs="0"maxOccurs="unbounded"/>
<choice>
<elementref="uddi:accessPoint"/>
<elementref="uddi:hostingRedirector"/>
</choice>
<elementref="uddi:tModelInstanceDetails"/>
</sequence>
</complexType>
例子:
<bindingTemplateserviceKey="uuid:c1acf26d-9672-4404-9d70-39b756e62ab4bindingKey="uuid:67153d5b-3659-afb4-8510-adda2c034649">
<description>SOAPBinding</description>
<accessPointURLType="http">
07/Array2String/service.asmx
</accessPoint>
<tModelInstanceDetails>
<tModelInstanceInfotModelKey="uddi:02016094-9c03-47e9-a52b-1dec2d0c1454"><instanceDetails>
<overviewDoc>
<description>
referencestheWSDLservicedefinition
</description>
<overviewURL>
07/Array2String/service.wsdl
</overviewURL>
</overviewDoc></instanceDetails>
</tModelInstanceInfo>
</tModelInstanceDetails>
</bindingTemplate>
4.tModel
tModel是一種描述類型的技術(shù)方式,這里類型是指存儲在UDDI注冊中心的業(yè)務(wù)、服務(wù)、模板結(jié)構(gòu)等的類型。任何抽象概念都可以在UDDI注冊為tModel。在UDDI注冊的每個業(yè)務(wù)根據(jù)預(yù)先定義的服務(wù)類型(tModels)列表劃分它的服務(wù)。注冊時,可以選擇屬于現(xiàn)有tModel的類型(因此,必須與現(xiàn)有的規(guī)范一致),或定義一個新的tModel。例如,如果定義了一個新的WSDL接口,在UDDI內(nèi)就可以定義一個表示該接口的tModel。然后,Web服務(wù)通過把tModel和業(yè)務(wù)服務(wù)的一個bindingTemplate相關(guān)聯(lián),實現(xiàn)該接口規(guī)范。tModel的XMLS定義及例子如下:
<elementname="tModel"type="uddi:tModel"/>
<complexTypename="tModel">
<attributename="tModelKey"type="uddi:tModelKey"use="required"/>
<attributename="operator"type="string"use="optional"/>
<attributename="authorizedName"type="string"use="optional"/><sequence>
<elementref="uddi:name"/>
<elementref="uddi:description"minOccurs="0"maxOccurs="unbounded"/>
<elementref="uddi:overviewDoc"minOccurs="0"/>
<elementref="uddi:identifierBag"minOccurs="0"/>
<elementref="uddi:categoryBag"minOccurs="0"/>
</sequence>
</complexType>
例子:
<tModeltModelKey="uddi:02016094-9c03-47e9-a52b-1dec2d0c1454"
operator="/~ychen10/teaching/cse445"
authorizedName="CourseInstructor">
<name>Array2StringPortType</name>
<description>Aninterfaceforgeneralfloatarraytostringconversion
</description>
<overviewDoc>
<overviewURL>
07/Array2String/service.d.wsdl
</overviewURL>
</overviewDoc>
</tModel>
5.publisherAssertion
對于大型公司和企業(yè),單一的業(yè)務(wù)條目不足以表示這些公司的業(yè)務(wù)。UDDI允許發(fā)布多個業(yè)務(wù)條目,代表部門或子公司。數(shù)據(jù)模型publisherAssertion使它們的關(guān)系在UDDI注冊中心可見。為了避免某一發(fā)布者錯誤地聲明了與另一發(fā)布者的關(guān)系,只有兩個發(fā)布者發(fā)布同樣的信息時,他們的關(guān)系才發(fā)布。
publisherAssertion結(jié)構(gòu)包括三個元素:fromKey(thefirstbusinessKey),toKey(thesecondbusinessKey),keyedReference,它用tModel內(nèi)唯一被tModelKey引用的一對術(shù)語(keyName,keyValue),指出了宣稱的關(guān)系的類型。這個數(shù)據(jù)結(jié)構(gòu)的XMLS定義如下:
<elementname="publisherAssertion"type="uddi:publisherAssertion"/>
<complexTypename="publisherAssertion">
<sequence><elementref="uddi:fromKey"/>
<elementref="uddi:toKey"/>
<elementref="uddi:keyedReference"/>
</sequence>
</complexType>
服務(wù)提供者和應(yīng)用構(gòu)建者提供的UDDIAPIs可以創(chuàng)建和訪問UDDI數(shù)據(jù)條目。下面的API操作支持這一目標。
InquiryOperations:Find
find_business
find_service
find_binding
find_tModel
Getdetails
get_businessDetail
get_serviceDetail
get_bindingDetail
get_tModelDetail
get_registeredInfoPublishingOperations:
Save
save_business
save_service
save_binding
save_tModel
Delete
delete_business
delete_service
delete_bindingdelete_tModel
get_registeredInfo
Securityoperations:
get_authToken
discard_authToken
以find_business作為例子,它搜索和給定標準匹配的業(yè)務(wù)。這個API的語法定義如下:
<find_businessgeneric="2.0"[maxRows="nn"]xmlns="urn:uddi-org:api_v2">
[<findQualifiers/>]
[<name/>[<name/>]...]
[<discoveryURLs/>]
[<identifierBag/>]
[<categoryBag/>]
[<tModelBag/>]
</find_business>該API的參數(shù)解釋如下:
·maxRows:可選參數(shù),指定返回的最大行數(shù)。
·findQualifiers:可選參數(shù),重載默認搜索功能。例如,查找與企業(yè)名稱完全相符的方法exactNameMatch。
·name:業(yè)務(wù)的全部或部分名稱。UDDI2.0最多可以指定五個業(yè)務(wù)名稱。
·discoveryURLs:可選參數(shù),按發(fā)現(xiàn)的URLs進行搜索。
·identifierBag:可選參數(shù),按標識符搜索。
·categoryBag:可選參數(shù),按類搜索。例如,可以按NAICS代碼進行搜索。
·tModelBag:可選參數(shù),按tModel記錄搜索。
目前,大型計算機公司,例如IBM,Microsoft和SAP,都有公共的可訪問的UDDI服務(wù),并提供UDDI服務(wù)軟件,允許用戶實現(xiàn)自己的UDDI服務(wù)并供企業(yè)內(nèi)部或外部使用。UDDI是Windowsserver2003的一個標準組件。它的標準安裝會安裝微軟的企業(yè)UDDI組件,這個組件允許服務(wù)提供者注冊,也允許提供者開發(fā)的服務(wù)注冊(更多的信息可以查看網(wǎng)址:/)。IBM的WebSphereSOA開發(fā)環(huán)境可以安裝UDDI組件,該組件提供注冊服務(wù)。圖3.13顯示了微軟企業(yè)UDDI組件的體系結(jié)構(gòu)。它為手動注冊、自動注冊和注冊表搜索提供了人機接口和編程接口。
圖3.13Microsoft的UDDI服務(wù)器的體系結(jié)構(gòu)
UDDI請求管理器接收來自ASP.Net頁面或Web服務(wù)接口的請求,并調(diào)用UDDI類庫中合適的服務(wù)。
UDDI類庫把不同類型的函數(shù)封裝成標準的Web服務(wù),包括MSDE和SQL數(shù)據(jù)庫提供的服務(wù)。
作為普通用戶,可以手工注冊為服務(wù)提供者、然后注冊服務(wù)并搜索服務(wù)。
作為編程用戶,可以通過.Net編程環(huán)境下的C#訪問企業(yè)UDDI服務(wù)。在C#程序開頭,你可以導(dǎo)入內(nèi)嵌的UDDI名字空間/庫,它提供了訪問UDDI服務(wù)必需的類和函數(shù):usingMicrosoft.Uddi;
usingMicrosoft.Uddi.Services;
usingMicrosoft.Uddi.TModels;
然后,你可以使用下面的類和類的成員函數(shù)訪問服務(wù):UddiConnectionconn=
newUddiConnection("http://localhost/uddi/inquire.asmx");//1stFindServicefs=newFindService(txtName.Text);//2nd
ServiceListservList=fs.Send(conn);//3rdforeach(ServiceInfoservInfoinservList.ServiceInfos){//4th
MessageBox.Show("Service:"+servInfo.Names[0].Text
+""+servInfo.ServiceKey);
}
第一條語句創(chuàng)建了一個UddiConnection實例,用企業(yè)UDDI服務(wù)地址作為構(gòu)造函數(shù)的參數(shù)。此語句建立了與被訪問的UDDI的連接。
第二條語句創(chuàng)建了類“FindService”的一個對象,以便找到所需的業(yè)務(wù)。通過文本文件“txtName.Text”,搜索鍵被傳給對象。第三條語句調(diào)用對象FindService的Send方法(成員函數(shù)),以前創(chuàng)建的UddiConnection對象作為參數(shù)傳遞。Send方法返回一個ServiceList類型的可用服務(wù)列表。
第四條語句是一個for循環(huán),在循環(huán)中顯示找到的每個服務(wù)的服務(wù)名稱和標識。
UDDI實體的訪問在概念和語法上類似于數(shù)據(jù)庫操作。本書第7章將詳細討論程序和數(shù)據(jù)庫之間的接口以及數(shù)據(jù)庫訪問和操作的接口。3.3.3ebXML服務(wù)注冊和存放
用于電子商務(wù)的可擴展標記語言(ebXML,ElectronicBusinessusingeXtensibleMarkupLanguage)是一種規(guī)格說明/標準的模塊化套件,這種規(guī)格說明/標準使任何地方任何規(guī)模的企業(yè)都可以通過互聯(lián)網(wǎng)開展業(yè)務(wù)。使用ebXML,各公司就有一個標準的方法來交換業(yè)務(wù)信息、開展貿(mào)易關(guān)系、用共同的術(shù)語進行數(shù)據(jù)通信、定義并注冊業(yè)務(wù)過程(http:///)。從服務(wù)中介的角度來看,它定義了比UDDI更多的功能。最顯著的區(qū)別在于,ebXML除了提供服務(wù)注冊外,還提供了服務(wù)存儲。由于大型計算機公司,如Microsoft、IBM和Oracle,都有托管自己服務(wù)的資源,因此他們更喜歡使用UDDI。另一方面,中小IT企業(yè)、核心業(yè)務(wù)不是IT的公司以及政府組織會選擇ebXML。ebXML于1999年由OASIS和聯(lián)合國/ECE機構(gòu)CEFACT共同提出。原項目設(shè)想并給出了數(shù)據(jù)規(guī)格的五個層次,包括XML標準。
1.ebXML業(yè)務(wù)過程規(guī)格說明圖表,或ebBPebXMLBusiness(ProcessSpecificationSchema)
ebXML業(yè)務(wù)過程規(guī)格說明圖表定義了一個配置合作伙伴之間的業(yè)務(wù)協(xié)作執(zhí)行系統(tǒng)的標準語言。業(yè)務(wù)流程定義(或ebBP定義),描述了能夠?qū)崿F(xiàn)合作伙伴企業(yè)目標的、共同使用的一個業(yè)務(wù)流程,該流程支持過程設(shè)計/描述,能夠協(xié)作監(jiān)控和確認并引導(dǎo)流程的執(zhí)行。ebBP指明了業(yè)務(wù)交易(S)、業(yè)務(wù)合作(BC)所使用的共同設(shè)計語言(choreography),以及合作的業(yè)務(wù)。協(xié)作雙方為了調(diào)整技術(shù)狀態(tài)交換業(yè)務(wù)信號。核心功能包括:①標準的和可擴展的業(yè)務(wù)交易模式;
②狀態(tài)調(diào)整;
③雙方或更多方的業(yè)務(wù)合作;
④組合及關(guān)系是可見的:不管過程定義在什么地方,在業(yè)務(wù)交易中第三方是可見的;
⑤允許混合使用ebXML或Web服務(wù);
⑥支持參與方/角色定義;
⑦改進過程生命周期的組成部分以及各部分間的轉(zhuǎn)換;
⑧使用語義信息處理過程和文檔。
2.核心組件
ebXML核心組件技術(shù)規(guī)格(CCTS)提出了開發(fā)通用業(yè)務(wù)數(shù)據(jù)類型的語義構(gòu)建塊的方法。這使通過核心組件(CC)和業(yè)務(wù)信息實體(BIEs,BusinessInformationEntities),可重用具有共同理解的數(shù)據(jù)成為可能。CC和BIEs是由聯(lián)合國(UN)的促進貿(mào)易和電子商務(wù)中心(CEFACT)開發(fā)的,CC提供:
①對象/數(shù)據(jù)的通用概念模型;
②定義詞典條目的通用語義信息時的命名習(xí)慣;
③為了業(yè)務(wù)價值表示的一致性,一組固定的可重用的數(shù)據(jù)類型。
3.合作協(xié)議草案和協(xié)議(CPPA)
它為業(yè)務(wù)協(xié)作提供了通過技術(shù)達到合作伙伴期望的渠道。該草案包含業(yè)務(wù)合作伙伴的技術(shù)能力。它涵蓋了協(xié)議的特征和屬性提供的功能和偏好,這里協(xié)議的特征和屬性是在過程中使用的活動和組件服務(wù)的特定角色所具有的。它使協(xié)作過程中會話的監(jiān)控和交付渠道特征的驗證成為可能。第二組協(xié)議包含了配置業(yè)務(wù)合作協(xié)議共享方面的數(shù)據(jù)。CPP/CPA2.1增進的功能包括:
①其他信息、業(yè)務(wù)過程、功能(如ebBP)的擴展框架;
②擴展了消息交換模式的傳輸能力;③增加了多個公開服務(wù)的組合性;
④改進了合作方的身份鑒定。
4.消息服務(wù)
消息服務(wù)定義了交換電子商務(wù)信息時通信協(xié)議中立的方法。它定義了信息功能、協(xié)議、在SOAP上運行時(SOAPv1.1和帶附件的SOAP)的封裝、綁定到依賴標準SOAP綁定的較低傳輸層;當需要時可用ebMS補充上述信息。
5.注冊和存儲
ebXML3.0的注冊和存儲中心提供了注冊、定位以及訪問分布式(或聯(lián)合)安全環(huán)境中的信息資源的服務(wù)。目前3.0的特征包括:
①注冊聯(lián)合支持;
②復(fù)制內(nèi)容/元數(shù)據(jù);
③增強安全性:XACML,SAML;
④可擴展的服務(wù)接口和協(xié)議;
⑤新的服務(wù)請求和響應(yīng)類型的定義;
⑥HTTP綁定到ebXML注冊服務(wù)接口;
⑦使用REST類型的體系結(jié)構(gòu);⑧內(nèi)容管理(確認和目錄管理);
⑨增強查詢。
ebXML的目標是為中小型企業(yè)(SME)和政府機構(gòu)的綜合電子商務(wù)平臺提供技術(shù)路徑。電子商務(wù)交易
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 加油卡用戶隱私保護
- 行紀合同范本模版
- 建筑勘察單價合同范本
- 影視公司CEO招聘合同模板
- 食品安全檢測投標保密書
- 礦山開采灰土施工合同
- 寫字樓訪客管理規(guī)章
- 家電售后服務(wù)工程師聘用合同
- 教育培訓(xùn)機構(gòu)安全協(xié)議
- 城市供水管網(wǎng)改造圍擋施工合同
- 預(yù)繳物業(yè)費感恩回饋活動方案
- 24春國家開放大學(xué)《鄉(xiāng)鎮(zhèn)行政管理》作業(yè)1-5參考答案
- 2024年激光切割機市場需求分析報告
- 西餐原料知識理論知識考核試題及答案
- 加油站員工績效考核(標準版)
- 2024年國家開放大學(xué)(電大)-國家開放大學(xué)(國學(xué)經(jīng)典選讀)筆試歷年真題薈萃含答案
- 自動泊車系統(tǒng)的使用說明
- 文言文閱讀訓(xùn)練:曾鞏《隆平集-何承矩》(附答案解析與譯文)
- 《路德維希·費爾巴哈和德國古典哲學(xué)的終結(jié)》導(dǎo)讀
- 材料分揀plc控制系統(tǒng)設(shè)計
- 應(yīng)用經(jīng)方治療頑固性心力衰竭課件
評論
0/150
提交評論