官术网_书友最值得收藏!

基于Web Service技術實施業務整合的設計與實現

北京市第二中學 王甲春

在北京市大力推動基礎教育信息化的進程下,越來越多的信息技術應用系統不斷出現,給教師、學生、家長都帶來了很大的方便。特別是從2002開始,北京市教委開始試點并推廣CMIS(Campus Management Information System,北京市中小學校園管理信息系統),CMIS是北京市教育委員會根據國家教育部2002年頒布的《教育管理信息化標準規范(試行)》而研發的基礎教育信息管理軟件,是北京市教育信息化建設的重要組成部分。它以提高學校內部管理水平并適應當前素質教育的學校管理要求為目標,提供能夠滿足中小學校教育教學管理需要的全套解決方案,可輕松實現與上級教育部門應用軟件的無縫鏈接,從而達到教育數據的一致性、標準性和規范性。

在CMIS規范電子學籍的基礎上,各區縣、各學校也開發了越來越多的應用系統,比如北京市東城區的藍天工程網站、北京市第二中學的家?;悠脚_、選課系統等。目前這些眾多的應用系統使用都較好,但是也暴露出一些不足。如果學生在同一學校轉班或者轉學時,個人信息的很多數據就需要在每個系統內重新設置,給負責的老師帶來了麻煩。由于目前各區縣以及各學校大部分采取從CMIS導出數據,再向各自開發的系統內導入數據的方式,所以越來越多的業務系統成為一個個獨立的數據孤島,即使是年級、班級、姓名、學籍號等基礎數據也是互相獨立的,并不能做到實時同步。一旦數據發生變化,需要手工在所有系統內進行單獨調整,這必然會導致一系列麻煩的發生,甚至某些數據的錯誤。

如何進行不同業務的整合,即基礎數據只有一份,所有系統都共享該基礎數據,并無縫集成到每個獨立的系統中?本文將利用Web Service技術,對這一問題進行一些研究與嘗試,希望能給系統開發者提供一些參考,并給用戶減輕一些人為造成的麻煩和數據錯誤。

一、Web Service概述

(一)Web Service定義及相關技術規范

根據W3C組織的描述,Web Service是基于通過網絡支持計算機間的集成來設計軟件應用程序的。它的接口用計算機可處理的格式(通常是WSDL)來描述。其他軟件應用程序通過該接口描述的方式與Web Service交流,利用SOAP消息,通常是序列化的XML通過HTTP或其他網絡標準傳輸。

從表面上看,Web Service就是一個應用程序,它向外界暴露出一個能夠通過Web進行調用的API。這就是說,你能夠用編程的方法通過Web調用來實現某個功能的應用程序。從深層次上看,Web Service是一種新的Web應用程序分支,它們是自包含、自描述、模塊化的應用,可以在網絡(通常為Web)中被描述、發布、查找以及通過Web來調用。

在Web Service體系結構中,涉及多方面的技術規范,包括:XML、SOAP、WSDL、UDDI,它們構成一個互操作的協議棧。

1.XML和HTTP

XML(Extensible Markup Language,可擴展的標記語言)是Web Service平臺中表示數據的基本格式。XML是一種界定文本數據的簡便且標準的方法,它是開放的、自描述的。XML協議格式具備描述各種類型數據的能力,它使Web應用集成在數據層上達成了一致,解決了不同平臺或系統、不同數據結構或模式之間的差異,使得原本復雜的數據層的集成變得簡單起來。HTTP(Hyper Text Transfer Protocol,超文本傳輸協議)則是一個在因特網上廣泛使用的協議,為Web Service部件通過因特網交互奠定了協議基礎,并具有穿透防火墻的良好特性。

2.SOAP

SOAP(Simple Object Access Protocol,簡單對象訪問協議),它是用于交換XML編碼信息的輕量級協議。SOAP屬于服務調用協議,是Web Service體系結構中服務交互的基礎架構。SOAP是一種獨立的、通用的、基于XML標準的、文本對象的訪問協議,用于在不同的系統中發送和接收XML數據,實現相互通信。Web Service實現了不同系統之間的相互調用,打破了軟件應用、網站和各種設備之間的格格不入的狀態,實現“基于Web無縫集成”的目標。

3.WSDL

WSDL(Web Service Description Language,Web Service描述語言)提供了一個能用機器閱讀的基于XML的語言,用于描述Web Service及其函數、參數和返回值。WSDL是Web Service接口界面的跨平臺工具。WSDL首先對操作和消息進行抽象描述,然后將其綁定到具體的網絡協議和消息格式上,再定義端點。它將網絡服務描述成一組端點,這些端點中包含對面向文檔或面向過程信息的消息處理操作。因為WSDL是基于XML的,所以它既是機器可閱讀的,又是人可閱讀的。

4.UDDI

UDDI(Universal Description and Discovery Integration,統一的描述、發現和集成)是一套基于Web的、分布式的、為Web Service提供的、信息注冊中心的實現標準規范,同時也包含一組使企業能將自身提供的Web Service注冊,以使別的企業能夠發現的訪問協議的實現標準。UDDI全球注冊點記錄的是Web Service信息,你可以不把Web Service注冊到UDDI,但如果要讓所有人都知道你的Web Service,最好還是注冊到UDDI。

(二)Web Service應用優勢

在本文探討的業務整合問題上,使用Web Service技術具有非常大的優勢。

1.強大的軟件支持

操作系統離不開豐富的應用軟件的支持。同樣,Web Service這項技術只有通過日益廣泛的應用才能體現出其價值,如今Microsoft、IBM、SUN、Borland等不同廠商都推出了完善的Web Service構建工具,在市場上也可以看到它們所創建的Web Service應用。

2.跨平臺的應用

由于Web Service是基于網絡的、分布式的模塊化組件,它執行特定的任務,遵守具體的技術規范,這些規范使得Web Service能與其他兼容的組件進行互操作。Web Service平臺是一套標準,它定義了應用程序如何在Web上實現互操作性。所以開發人員可以用喜歡的任何語言(如C#、Java、Delphi等),在任何主流操作系統(如Windows、Linux、Unix等)平臺上寫Web Service,并且最終的應用架構可以是B/S形式也可以是C/S形式。

3.基礎數據的規范化

利用XML統一數據描述格式,使信息描述規范化。為了發布基于基礎數據應用系統的Web Service,首先就要對基礎數據本身進行規范。此外,XML實現了表現形式和數據的分離,這允許它能夠對來自不同應用系統的數據進行集成和處理,從而實施業務整合。

二、業務整合的體系設計

在本文描述的業務整合方案中,可以設定一些基礎數據,對應一個基礎數據庫以及一個基礎數據管理系統。如果是已有基礎數據平臺,只要在原有數據平臺的基礎上將需要暴露出來的功能封裝成Web Service,這樣這個應用程序既能被其他應用程序通過Web Service進行調用,又能保證它原有的應用不會受到影響。整個業務整合的方案體系可以用圖1表示。

圖1

三、業務整合的技術實現

(一)Web Service的實現

1.基礎數據庫

為了問題描述與設計方案的方便,這里選擇使用Microsoft Access數據庫軟件設計數據庫(data.mdb),需要共享的基礎數據表student結構如圖2所示。

圖2

輸入一些基本數據用于測試,必須要有一個惟一的字段比如學號,根據學號可以查出其他信息:

2.Web Service的發布

Web Service可以由Java、.Net和Delphi等任何技術開發,Delphi 7作為Window平臺的Web Service基礎環境與開發工具,將RAD便利性帶人Web Service開發領域,簡化了開發Web Service應用程序的復雜度,讓開發人員專注于應用方面的開發,而無需顧及繁瑣的Web Service規范等。它通過使用SOAP實現對Web Service的支持,它基于HTTP消息,開發的Web Service可以在多種平臺上運行。

在Delphi 7集成開發環境中點擊File | New | Other菜單,在Web Service選項卡中選擇SOAP Server Application選項,選擇需要創建服務的類型為CGI可執行文件,但在實際使用時,常常會選擇一個更高效的Apache或ISAPI/NSAPI DLL類型。

先不自動創建SOAP接口模塊,因為程序需要連接數據庫,點擊File | New | Other菜單,在Web Service選項卡中選擇SOAP Server Data Module選項創建數據接口模塊,接口名稱為“testdataservice”,保存所有文件,工程上保存為“demo.dpr”。

在數據模塊對應的單元文件內,Delphi自動生成了“testdataservice”這個Web Service的接口和實現代碼。在數據模塊上放置一個TADOConnection控件和一個TADOQuery控件。設置ADOConnection1的ConnectionString屬性,將它連接到數據庫data.mdb,設置ADOQuery1的Connection屬性為ADOConnection1。創建一個學生信息類TStudent,用于記錄學生個人信息:

        TStudent = class(TRemotable)
        private
          Fxuehao: String;
          Fnianji: String;
          Fbanji: String;
          Fxingming: String;
          Fxingbie: String;
        published
          property xuehao: String read Fxuehao write Fxuehao;
          property nianji: String read Fnianji write Fnianji;
          property banji: String read Fbanji write Fbanji;
          property xingming: String read Fxingming write Fxingming;
          property xingbie: String read F xingbie write Fxingbie;
        end;

Web Service接口提供一個函數,用于根據輸入的學號得到學生的個人信息:

        function GetStudentInfo(const ID: String): TStudent; stdcall;

函數的具體實現代碼如下:

      function Ttestdataservice.GetStudentInfo(const ID: String): TStudent;
      begin
        ADOQuery1.SQL.Clear;
        ADOQuery1.SQL.Add('select * from student where xuehao='+''''+ID+'''');
        ADOQuery1.Open;
        Result:=TStudent.Create;
        Result.xuehao:=EncodeString(ID);
        Result.nianji:=EncodeString(ADOQuery1.FieldByName('nianji').AsString);
        Result.banji:=EncodeString(ADOQuery1.FieldByName('banji').AsString);
        Result.xingming:=EncodeString(ADOQuery1.FieldByName('xingming').AsString);
        Result.xingbie:=EncodeString(ADOQuery1.FieldByName('xingbie').AsString);
      end;

程序代碼內的EncodeString函數在Encddecd單元定義。為了考慮不同平臺不同語言間的通信,這里統一將字符串編碼為base64格式,其他程序得到這個字符串需要進行還原操作。如果不進行統一編碼,不同程序調用Web Service的時候,傳遞中會出現亂碼的情況。

3.Web Service測試

編譯程序,將生成的CGI程序demo.exe以及數據庫文件data.mdb一起配置到IIS的根目錄或者虛擬目錄內。為了執行CGI程序,需要在IIS內將主目錄的執行權限改為“腳本和可執行文件”(默認值是“純腳本”)形式。

打開瀏覽器,在地址欄輸入“http://127.0.0.1/demo.exe”就可以看到程序公開的Web Service信息,點擊“Itestdataservice”鏈接可以查看它所公開的Web Service中的函數:

TStudent GetStudentInfo(string ID)

點擊“Itestdataservice”后面的“WSDL”鏈接可以看到Web Service的XML格式描述。當然,直接訪問“http://127.0.0.1/demo.exe/wsdl/Itestdataservice”也是同樣可以瀏覽到該Web Service。

至此,Web Service發布完成,其他程序則可以調用它公開出來的“GetStudentInfo”函數來獲取學生信息。

(二)C/S模式調用Web Service的實現

按照C/S模式的規范,如果你只是開發調用客戶端,那么你可以使用幾乎所有主流的編程工具來實現。下面還是以Delphi 7為例,首先創建一個普通的應用程序(c.dpr),然后在窗體上放置一個TEdit控件、一個TButton控件、四個TLabel控件和一個THTTPRIO控件(在WebServices控件面板上),設置THTTPRIO控件的URL屬性為“http://127.0.0.1/demo.exe/soap/Itestdataservice”。

在Delphi 7集成開發環境中點擊File | New | Other菜單,在Web Service選項卡中選擇WSDL Importer選項——不管這個Web Service不是由Delphi所開發,都可以用該方法導入WSDL源,在向導中輸入WSDL地址“http://127.0.0.1/demo.exe/wsdl/Itestdataservice”,Delphi會自動生成該Web Service對應的單元文件“Itestdataservice1.pas”,保存所有文件。

編寫按鈕單擊事件的代碼:

      procedure TForm1.Button1Click(Sender: TObject);
      var
        testobj:Itestdataservice;
      begin
        testobj:=HTTPRIO1 as Itestdataservice;
        Label1.Caption:='年級:'+DecodeString(testobj.GetStudentInfo(Edit1.Text).nianji);
        Label2.Caption:='班級:'+DecodeString(testobj.GetStudentInfo(Edit1.Text).banji);
        Label3.Caption:='姓名:'+DecodeString(testobj.GetStudentInfo(Edit1.Text).xingming);
        Label4.Caption:='性別:'+DecodeString(testobj.GetStudentInfo(Edit1.Text).xingbie);
      end;

程序代碼使用了Encddecd單元定義的EncodeString函數,用于將Web Service公開的GetStudentInfo函數所返回的base64格式字符串還原為原始未編碼的字符串。

運行程序,在編輯框輸入學號,得到了學生的基本信息。因為本程序沒有直接使用任何數據庫操作,但是得到了基本數據,Web Service在C/S模式下調用成功。

(三)B/S模式調用Web Service的實現

按照B/S模式的規范,客戶不需要安裝任何其他程序,只要打開瀏覽器輸入網址就可以進入應用系統,所以需要把該系統部署在Web服務器上。

本例以目前比較流行的ASP.net(C#)進行實現,首先確保在IIS基礎上安裝好Microsoft .net Framework以及Microsoft .net Framework SDK。

使用Dreamweaver 8創建ASP .net C#站點,在IIS主目錄下新建目錄“bsmode”,用于存放本例測試網頁“index.aspx”。在Dreamweaver的“應用程序”面板的“組件”項添加Web Service組件,選擇“使用WSDL添加”方式,根據WSDL地址“http://127.0.0.1/demo.exe/wsdl/Itestdataservice”,Dreamweaver將自動生成ASP .net C#代理類“Itestdataserviceservice.cs”。

編寫“index.aspx”源碼如下:

      <html>
      <head>
      <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
      <title>B/S模式調用Web Service演示</title>
      </head>
      <script language="C#" runat="server">
        protected void Button1_Click(object sender, EventArgs e)
        {
          Itestdataserviceservice testobj = new Itestdataserviceservice();
          Label1.Text ="年級:"+Encoding.Default.GetString(
            Convert.FromBase64String(testobj.GetStudentInfo(TextBox1.Text).nianji));
          Label2.Text ="班級:"+Encoding.Default.GetString(
            Convert.FromBase64String(testobj.GetStudentInfo(TextBox1.Text).banji));
          Label3.Text ="姓名:"+Encoding.Default.GetString(
            Convert.FromBase64String(testobj.GetStudentInfo(TextBox1.Text).xingming));
          Label4.Text ="性別:"+Encoding.Default.GetString(
            Convert.FromBase64String(testobj.GetStudentInfo(TextBox1.Text).xingbie));
        }
      </script>
      <body>
        <form runat="server">
        <p>
        <asp:TextBox ID="TextBox1" runat="server" Text="20080305"></asp:TextBox>
        <asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="獲取信息"/>
        </p>
        <p>
          <asp:Label ID="Label1" runat="server" />
          <asp:Label ID="Label2" runat="server" />
          <asp:Label ID="Label3" runat="server" />
          <asp:Label ID="Label4" runat="server" />
        </p>
        </form>
      </body>
      </html>

程序代碼使用了Convert.FromBase64String函數,用于將Web Service公開的GetStudentInfo函數所返回的base64格式字符串還原為原始未編碼的字符串。

將“Itestdataserviceservice.dll”復制到網站的“bin”目錄下,打開瀏覽器,在地址欄輸入“http://127.0.0.1/ bsmode /index.aspx”就可以看到測試頁面,在編輯框輸入學號,得到了學生的基本信息,Web Service在B/S模式下調用成功。

四、總結

為了問題描述與設計方案的方便,這里主要介紹了Web Service的設計以及C/S模式、B/S模式下的調用方法,通過調用Web Service共享基礎數據,實現了業務整合的基本框架,并且測試成功。Web Service所公開的函數GetStudentInfo可以進一步細化,例如輸入一個不存在的學號或不規范的學號可以根據實際需求返回相應的提示信息。對于多個系統如網上選課系統、家?;悠脚_等,具體業務本身的設計則不是本課題需要探討的問題。另外,在實際的應用中,對于基礎數據本身的操作比如添加、刪除、修改等,建議設置獨立的系統或程序來完成。

參考資料

[1] 柴曉路.Web服務架構與開放互操作技術.北京:清華大學出版社,2002.

[2] 李維.Delphi 6/kylix SOAP/Web Service.北京:機械工業出版社,2002.

[3] 張艷瓊,蔡瑞英.基于URP的數字校園解決方案.湖南師范學院學報,2007,(4):81-84.

主站蜘蛛池模板: 英超| 宁强县| 梓潼县| 玉林市| 平原县| 揭东县| 敦化市| 都匀市| 沂源县| 竹溪县| 永靖县| 枣庄市| 武平县| 贵港市| 双鸭山市| 田林县| 酒泉市| 庄浪县| 荣成市| 西乌珠穆沁旗| 永清县| 阳泉市| 瓮安县| 绥化市| 嘉荫县| 鄂托克旗| 米泉市| 台南市| 迭部县| 元谋县| 华安县| 固原市| 香港| 苍溪县| 通江县| 理塘县| 保山市| 舒城县| 玛曲县| 搜索| 武隆县|