M 作 者: cn_prince(欢喜王子) 2001-06-11 20:58:55 :0 :0
[回复] [打包] [转贴]
我尚无缘得见新版本的Delphi。据可靠消息称,它提供对SOAP--Web Services的基础--的全面支持,而扔弃了Borland MIDAS。
为什么这只软件大鲨会对Web Services如此钟情?他们的动机很容易明白。Web services意味着不用再卖产品,而是卖服务。不再会有盗版。版权受到完全保护:制造商独家保有软件。和消费者签订的合同将会是长期的。而且如同上瘾一半,用户用得越多,就越是想用。对于大企业来说这就是白花花的银子、用户忠诚和集权。从坏处想,Web services也有可能使客户的交流和日常生活被主宰--新资本主义革命的混合体以及"大哥"--噩梦。
有人希望那只是刺激的白日梦。只有在未来才能看到Web services在社会中所起的作用。但无庸置疑,它们已经使业界产生了极大的改变,就像PC和Internet的出现一样。而我们,开发人员,必须做好准备。
这里有一个简单的例子--执行某个数学计算,x+y什么的。(这是一个高度抽象的例子;你可以把它投射到真实世界中)。以前,要完成这个任务,用这样的代码:
function HaveSum (x: integer; y: integer): integer;
begin
Result:=x+y;
End;
后来,人们发明了OOP(面向对象编程)。于是我们就有了一个包括两个整数值和一个GetSum方法的ThaveSum类,然后用它创建一个对象实例。在设计层面上,这显得既雅致又高效(此出就不再继续讨论OOP的好处了)。跟着是微软的COM。对象不再只是被创建,更是一个生命体。
程序设计变成协调所有这些生命体,完成某种任务,而非单纯做一个工匠的工作。
问题在于这些生命体并非都易于伺候,但Microsoft Office仍然实现了这一策略。理论上COM被设计为可以接收远程调用,如果一个办公室里有20个用户想知道x+y到底等于几,我们就只需要创建一个IhaveSum COM,然后分发、销售、回答所有这些用户的
问题。
现在,Web services之梦来了:不分发产品,而是分发服务。如果谁要求服务,就要呼叫分发者执行,并且为服务付钱。软件用户与软件产品完全隔绝,他只关心产品给出的结果(而那就是在已然过去了的"黄金时代"里,购买或合法拷贝的真正原因)。
简单的Delphi 5例子
Web services的两大柱石--HTTP和XML已经为Delphi开发者所熟知了。下面我想展示用Delphi 5来实现Web services。希望Delphi 6的例子很快就可以给出。
首先我要实现HTTP协议。服务器可以是
asp或PHP页面。既然我们用Delphi,那就用Delphi CGI stand-alone可执行文件做服务器。只需要几分钟时间、一行代码就可以完成(我在解释给菜鸟听呢)。
选择 File(文件)- New(新建)- New Web Server Application(新Web服务器应用
程序)。我们要做的事用CGI就可以了,而且便于调试。在真实环境中用ISAPI DLL会好些。于是我们得到一个WebModule。打开它的Action Editior,在OnAction事件中加入下面的代码:
procedure TWebModule1.WebModule1WebActionItem1Action(Sender: TObject;
Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
begin
Response.Content :=IntToStr( StrToIntDef(Request.QueryFields.Values[''x''],0) +
StrToIntDef(Request.QueryFields.Values[''y''],0));
end;
服务器计算两个变量之和,然后传送到客户端。
在Delphi中可以有多种方法实现HTTP协议。可以用WinInet API函数(在Marco Cantu的《精通Delphi 5》中有很好的例子)或者Indy组件(在Delphi 6中应该整合了Indy,也可以在http://www.nevrona.com/Indy
下载。这里我打算用Microsoft Internet Tran