转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 软件开发 >> Delphi程序 >> 正文
李维:樂趣無窮,可能無限的新技術-Web Service         ★★★★

李维:樂趣無窮,可能無限的新技術-Web Service

作者:闵涛 文章来源:闵涛的学习笔记 点击数:1476 更新时间:2009/4/23 18:44:04
yTitles方法則是使用dbExpress從InterBase中讀取所有的資料,並且把文章的ID和名稱儲存在一個TEssaysInfo物件中,再把TEssaysInfo物件儲存在TEssaysInfos陣列中,最後回傳此陣列給用戶端。


unit uMyEssaysImpl;
interface
uses
  SysUtils, Classes, InvokeRegistry, XSBuiltIns, uMyEssaysInf, uEssaysInfo, DB, HTTPProd, udmMyEssays, DBXpress;
type
  TMyEssays = class(TInvokableClass, IMyEssays)
  private
    procedure CreateDataModule;
    procedure FreeDataModule;
  public
    { IISAPITutorials }
    function GetEssayTitles: TEssaysInfos; stdcall;
    function GetEssayContent(const iID : Integer) : String; stdcall;
  end;
implementation
{ TISAPITutorials }

procedure TMyEssays.CreateDataModule;
begin
  dmMyEssays := TdmMyEssays.Create(nil);
end;

procedure TMyEssays.FreeDataModule;
begin
  if (Assigned(dmMyEssays)) then
  begin
    dmMyEssays.Free;
    dmMyEssays := nil;
  end;
end;

function TMyEssays.GetEssayContent(const iID: Integer): String;
begin
  Result := ''''

尚未實作, 請待續!!!

''''; end; function TMyEssays.GetEssayTitles: TEssaysInfos; var iNo : Integer; iID : Integer; eInfo : TEssaysInfo; TD: TTransactionDesc; begin CreateDataModule; TD.TransactionID := 1; TD.IsolationLevel := xilREADCOMMITTED; try dmMyEssays.sconnMyEssays.StartTransaction(TD); iNo := dmMyEssays.sdsMyEssays.RecordCount; SetLength(Result, iNo); iID := -1; with dmMyEssays.sdsMyEssays do begin while not Eof do begin Inc(iID); eInfo := TEssaysInfo.Create; eInfo.EssayID := FieldByName(''''EID'''').Value; eInfo.EssayTitle := FieldByName(''''ETITLE'''').Value; Result[iID] := eInfo; Next; end; end; finally dmMyEssays.sconnMyEssays.Commit(TD); FreeDataModule; end; end; initialization InvRegistry.RegisterInvokableClass(TMyEssays); end.



現在這個能夠處理複雜資料的Web Service便藉由Delphi 6提供的WebServices元件和精靈完成了,接下來就是開發用戶端應用程式來呼叫此Web Service以取得文章資訊了。

步驟 3 – 開發用戶端應用程式呼叫Web Service


使用Delphi 6開發呼叫Web Service的用戶端應用程式更簡單,因為Delphi 6提供的WebServices元件組中的THTTPRIO元件實在是太方便了,我們只要使用物件檢視器設定THTTPRIO元件的WSDLLocation特性值為欲呼叫的Web Service的WSDL,那麼THTTPRIO元件便可以自動的處理所有呼叫Web Service的細節。
例如下面便是使用Delphi 6開發的用戶端應用程式,在這個應用程式的主表單上使用了一個THTTPRIO元件,並且在它的WSDLLocation特性值中輸入剛才開發的Web Service的WSDL檔案的位址。


 

圖十三 範例用戶端應用程式的主表單



接著在『 我的文章』按鈕的OnClick事件處理函式中撰寫如下的程式碼:


procedure TForm2.BitBtn1Click(Sender: TObject);
var
  oriCursor : TCursor;
  eInfos : TEssaysInfos;
  iCount : Integer;
  lStart, lEnd : Longint;
begin
  ShowCaption;

  StatusBar1.Panels[0].Text := ''''呼叫Web Service中...'''';
  StatusBar1.Refresh;
  lvMyEssays.Items.BeginUpdate;
  lvMyEssays.Items.Clear;
  oriCursor := Screen.Cursor;
  Screen.Cursor := crHourglass;
  lStart := GetTickCount;
  try
    eInfos := (HTTPRIO1 as IMyEssays).GetEssayTitles;
    for iCount := low(eInfos) to High(eInfos) do
    begin
      with lvMyEssays.Items.Add do
      begin
        Caption := eInfos[iCount].EssayTitle;
        Data := Pointer(eInfos[iCount].EssayID);
      end;
    end;
  finally
    lEnd := GetTickCount;
    ShowRunTime(lStart, lEnd);
    lvMyEssays.Items.EndUpdate;
    StatusBar1.Panels[0].Text := ''''完成呼叫Web Service'''';
    StatusBar1.Refresh;
    Screen.Cursor := oriCursor;
  end;
end;

procedure TForm2.ShowCaption;
begin
  lblCaption.Caption := ''''太棒了, 我的第一個Web Service程式'''';
end;

procedure TForm2.ShowRunTime(const lStart, lEnd: Integer);
begin
  StatusBar1.Panels[1].Text := FloattoStr((lEnd - lStart) / 1000.0) + ''''秒'''';
end;



上面的程式碼藉由THTTPRIO元件呼叫IMyEssays介面的GetEssayTitles方法,取得TEssaysInfos陣列,再從陣列中一一的取出每一篇文章的名稱,最後再填入到主表單中的TListView元件之中。下圖就是執行此用戶端應用程式呼叫Web Service伺服器,並且取得所有文章資訊的畫面。從這麼簡單的數個步驟中,我們已經使用Delphi 6開發了一個真正的Web Service應用系統。


 

圖十四 範例用戶端應用程式呼叫Web Service得到資料的畫面



雖然這是我們使用Delphi 6建立的第一個Web Service,但是這個範例Web Service展示了Delphi 6的SOAP/Web Service解決方案能夠輕易的傳遞複雜的資料型態,因為在範例Web Service中是使用陣列的型態來傳遞所有的文章資訊。Delphi 6的SOAP/Web Service技術絕不是像一些工具只提供簡單的SOAP/Web Service解決方案,而是充分的提供了一般和複雜的應用程式,並且能夠整合各種元件模型,是目前最具威力,也是最先進的SOAP/Web Service開發工具之一。
Delphi 6除了提供強勁的Web Service開發功能之外,新的Web App Debugger不但可以幫助程式師除錯Web應用程式之外,也可以幫助程式師監督用戶端應用程式和Web Service之中傳遞的資訊。這些資訊包含了SOAP的封包,以及Web Service伺服器回傳回用戶端的所有SOAP封包。這對於程式師學習SOAP和解析SOAP Payload都非常有幫助。例如下圖便是我使用Web App Debugger檢視此範例Web Service應用系統傳遞的SOAP Payload。


 

圖十五 Delphi 6的Web App Debugger可以顯示用戶端和伺服端之間所有的訊息



為了證明Web Service的威力和相通性,目前全世界已經有許多人成立了各種Web Service的網站,讓開發人員能夠測試Web Service。例如現在WWW.XMethods.COM便是提供各種Web Service的網站之一。這個網站羅列了許多的Web Service,下圖便是這個網站目前提供的Web Service。


 

圖十六 Internet上的XMethods(www.xmethods.com)提供了許多的Web Service供人呼叫使用



現在讓我們使用Delphi 6開發一個用戶端應用程式來透過Internet/Intranet呼叫遠端由Java實作,執行在Apache上的一個查詢美國各州氣溫的Web Service。下圖是這個Web Service的詳細資訊,這個Web Service的作者甚至提供了Java用戶端應用程式展示如何呼叫這個氣溫Web Service,不過現在我想使用Delphi的用戶端應用程式來呼叫,而不是Java。


 

圖十七 XMethods上的眾多Web Service之一,Temperature Web Service



下圖便是在我的機器中使用Delphi 6開發的用戶端應用程式,藉由Delphi 6的WebServices元件組來呼叫這個位於遠端,我也不知道在什麼地方的氣溫Web Service的結果畫面。
從下圖中可以證明,雖然我並不知道這個Web Service在那裡,我仍然可以藉由Web Service的標準介面敘述WSDL來使用它,即使它是使用Java實作的,並且執行在Apache之上。


 

圖十八 Delphi實作的用戶端應用程式呼叫執行在遠端Apache上的Web Service



希望上面的內容可以讓各位讀者瞭解Web Service和SOAP在應用上的潛力以及Delphi 6提供的元件技術可以讓開發人員快速而且輕易的實作出各種威力強大的Web Service。
也許藉由Web Service和SOAP的出現,也會對於目前應用系統架構產生巨大的影響。例如現在『供應鏈』軟體非常的流行,但是許多的供應鏈軟體在整合上,中,下游廠商時,經常會需要所有的廠商使用相同的平台以及基層軟體。但是對於下游廠商而言,可能無法像上游廠商一樣使用昂貴的設備,例如UNIX BOX和大型ERP軟體,許多的下游小廠也許只能使用Window NT或是Linux平台。不過現在Web Service和SOAP可以提供非常完善的解決方案,就如同下圖顯示的一樣,下游廠商可以只使用ASP提供簡單的Web Service讓他的中游廠商呼叫。而上游廠商則可以在UNIX Box中藉由大型的ERP軟體呼叫中游廠商執行在Window 2000中的BizTalk Service。如此一來不但每一個廠商都可以選擇最適合的執行平台和軟體,也可以藉由Web Service和SOAP整合上,中,下游廠商而提供一個及時且完備的供應鏈。Web Service和SOAP正為軟體帶來無限的發展契機。


 

圖十九 Web Service的應用架構之一



雖然SOAP和Web Service目前已經成為標準並且也已經被世界廠商所接受和支援。但是SOAP和Web Service仍然是在成長期,功能規格仍然在繼續的改善和強化之中,因此SOAP和Web Service的變化也在預期之中。Delphi 6實作的SOAP和Web Service似乎是比較偏向IBM和Java的陣營,因此Delphi 6能夠很容易的和Java以及PHP,Perl等SOAP/Web Service解決方案整合。至於Microsoft的SOAP和Web Service則稍有不同,需要程式師特別注意一下。
如果下次有時間的話,那麼就讓我們繼續討論Microsoft的SOAP Toolkit以及.NET之中的SOAP解決方案,並且比較Delphi和它們之間的差異以及如何整合這些不同的SOAP實作技術。

相关帖子:

李维:軟體服務時代的來臨    

看看什么是软件服务时代!大家快来看看!

李维:.net vs delphi 6

   delphi6 爆发还是灭亡?

李维:我的回忆和一些有趣的事

看IT风云变幻,宝兰与微软背后的故事,

李维:2001 年軟體界的巨星 - Kylix

看宝兰, 一年之间连续推出kylix1.0 ,interbase6.0, delphi6,jbuilder5 ,c++builder6也不日即出,敬请关注宝兰2001年与微软对绝的杀手锏kylix

李维:Windows 原生開發工具的瑰寶 – Delphi 6   

 

李维问答集之语言选择篇

李维:樂趣無窮,可能無限的新技術-Web Service

我推荐的帖子

陈宽达: 遊戲程式設計初學者常遇之疑問   

明修栈道,暗渡陈仓,陈宽达点指开发工具

软件开发中的弊病

这篇文章不算精彩,但是引来的评论却很精彩!



上一页  [1] [2] 


[聊天工具]Gmail推出新功能:Web Clip__天极Yesky  [聊天工具]Web MSN你玩了吗__天极Yesky
[系统软件]Web Browser Express 概述  [系统软件]对Internet Explorer Web 控件做一点修改
[常用软件]小技巧:三步实现Web迅雷录制PPLive节目  [常用软件]过期踢出域名服务(Expire Domain Service)
[常用软件]天网防火墙:打开WEB和FTP服务  [VB.NET程序]使用VB.Net做一个配置web.config功能的WinForm(原…
[VB.NET程序]vb.net控件、web service简述  [VB.NET程序]使用vbscript脚本调用web服务
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · C语言系列  · VB.NET程序
    · JAVA开发  · Delphi程序
    · 脚本语言
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台