大家来谈谈Soap怎么样?(0分)

  • 主题发起人 主题发起人 Flintstone
  • 开始时间 开始时间
SOAP 的工作情况是:
SOAP 客户器以 HTTP 协议向 SOAP 服务器发送一个 XML 格式的 Request
例如: 客户器想查询 IBM 的股票价格:
<SOAP-ENV:Envelope>
<SOAP-ENV:Body>
<xmlns:m="http://www.stock.org/stock" />
<m:GetStockPrice>
<StockName>IBM</StockName>
</m:GetStockPrice>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
SOAP 服务器解析这个 XML 请求, 处理后同样以 HTTP 协议返回一个 XML 格式的 Response.
例如: 服务器送回 IBM 的股票价格:
<SOAP-ENV:Envelope>
<SOAP-ENV:Body>
<xmlns:m="http://www.stock.org/stock" />
<m:GetStockPriceResponse>
<Price>34.5</Price>
</m:GetStockPriceResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
最后 SOAP 客户器解析这个 XML 回复从而得知: IBM 的股票价格 34.5元
这里面有些内容可以推敲:
1.什么叫 "以 HTTP 协议" ?
HTTP 就是在通用 TCP 流协议上加上 Header + Content 的结构,并且缺省使用 80 端口.
HTTP 请求 Header 有类似如下结构
POST /getprice-request HTTP/1.1
Host: 10.10.10.188
Content-Type: text/xml;
charset="utf-8"
Content-Length: 507
HTTP 回复 Header 有类似如下结构
HTTP/1.1 200 OK
Server: Microsoft-IIS/5.0
Date: Thu, 16 Aug 2001 15:36:46 GMT
Expires: 0
Content-Type: text/html
Content:
HTTP 的 Content 就是 html 格式的文本.
SOAP 也是 Header + Content 的结构
SOAP 的 Header 和 HTTP 相同, 但是一般加入一句 SOAPAction,例如
SOAPAction: "http://10.10.10.188/soap-example"
SOAP 的 Content 就是 xml 格式的文本(上面的例子).
这些细节只是对用 TCP 直接开发 HTTP/SOAP 有用.如果 Delphi 用于制作 CGI/ISAPI,
它 的 TWebModule 已经封装了这些底层处理细节,不了解这些照样做 Web 开发 :)

2.什么是 " XML 格式" ?
SOAP 使用的 XML 文档分成三部分
<SOAP-ENV:Envelope>
<SOAP-ENV:Header>(可选)
<SOAP-ENV:Body>
具体规则请看:
SOAP 的命名: http://schemas.xmlsoap.org/soap/envelope
SOAP 的编码: http://schemas.xmlsoap.org/soap/encoding
上面实际已经有了SOAP Request和 SOAP Response的例子.
3.如何做 SOAP 服务器 ?
方法一: 可以从 TCP 开始. 解析 HTTP Header, Content,再解析 Content 中的 SOAP XML,
返回 HTTP Header, 编码并返回SOAP XML
方法二: 可以从 CGI/ISAPI 开始, 因为 TWebModule 具有解析 HTTP Header, Content的功能,
所以可以直接进入解析 SOAP XML,然后编码并返回 SOAP XML
方法二:用 Delphi 6 的 CGI/ISAPI 加 SOAP 控件. TWebModule 具有解析 HTTP Header, Content
的功能, SOAP 控件具有解析 SOAP XML, 编码并返回 SOAP XML 的全部功能.
您需要的就是针对 Business Logic 的 Object Pascal 编程 (class+interface), 甚至不需要
懂 HTTP 协议, SOAP XML 的知识.
您会选哪一种方法呢?
4.如何做 SOAP 客户器?
SOAP 协议规定了用 WSDL 标准格式来描述和发布每个 Web Service 提供的功能参数和返回值
例如:
<?xml version="1.0" ?>
<definitions xmlns="http://schemas.xmlsoap.org/wsdl/"
xmlns:xs="http://www.w3.org/2001/XMLSchema" name="IGetAreaservice"
targetNamespace="http://www.borland.com/soapServices/"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap"
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">
<message name="GetPriceRequest">
<part name="StockName" type="xs:string" />
......
分析这个文档,您就知道如何调用远程服务器上的 Web Service 了.但是人工分析谈何容易.
幸而 Delphi 6 提供了 WSDL Import 功能她能分析 WSDL 文档, 生成相应的 Object Pascal
Interface.
大家想必知道 Delphi 的 COM TypeLib Import 功能.它可以从注册表输入 COM 的类库,
生成生成相应的 Object Pascal类, 然后象调用普通 Object Pascal类那样调用 COM.
如今这个杰出功能在 Delphi 6 中进入了 SOAP 开发.
结论, 用 Delphi 6 即使不懂 SOAP 细节也可以很方便地开发 SOAP 服务器, SOAP 客户器.
令人为之精神振奋.
 
yysun: 你还是没有说明百到底“本质”区别在哪里?? 如果仅仅是WSDL,CGI实现
起来很容易,不就是自己的功能描述嘛!
况且,CGI的queryString也可以是XML格式的,自己解析一下就是了,输出也可以是
XML,我实在不明白SOAP和CGI到底有什么本质区别??
这就是我学了一段时间SOAP的体会
 
一个过客:没有“本质”区别。CGI 是马,Web Servie/SOAP 是白马。
CGI 当然可以输入输出 XML,如果这种 XML 是自定义的,例如我们的 DFWML,
那这就是“能处理 XML”的 CGI
而当这种 XML 是 SOAP 协议/格式的话,例如用:<SOAP-ENV:Envelope><SOAP-ENV:Header>
<SOAP-ENV:Body>,这就是 SOAP/Web Service。
 
Soap是一组讯息标准,用来传送信息,使不同语言写的程序可以互相沟通。你可用
CGI来生成SOAP的信息,也可用Java或别的语言来生成。
现在的Soap都偏向于使用http做为通信协议,其实也可以使用Smtp,ftp等其它协议
 
yysun:能发一个简单的程序让我看一下吗?谢谢!
mail:dana@shd.com.cn
 
大富翁论坛 基于 SOAP 的 Web Service - dfwSOAP 发布了!
http://delphibbs.com/delphibbs/dispq.asp?lid=600130
程序很快会发布的 :)
 
听孙老师的解释,是不是说SOAP中的过程调用的执行都是在服务器上进行的,然后通过封装
的XML将结果传回客户端,那么又有一个问题:是不是每次调用都要将这些过程载入?还是
代码共享,只需要加载一次?
 
流云: 本质 Web Service 还是一种 CGI/ISAPI
如果是 CGI 形式, 则每次调用都要将载入过程(*.exe)载入.
如果是 ISAPI 形式, 则过程(*.dll)可以载入一次 Cache 起来.
另外我发现 Delphi 做的 CGI exe 除了可以放在 IIS 中,
Apache Web Server 下也管用, 真是不错:)
 
大家继续,继续。
 
yysun: 那么soap到底有什么东西值得我们花费这么大精力去学习一们新的东西呢?
说实话,我研究有端时间了,但是没有看出这东西到底先进在什么地方。
 
我什么也不懂.我的学学.大家多多讨论.现在我连问题都问不出来
 
一个过客: SOAP 的作用相当于 DCOM, CORBAR, XMLRPC。可不是每个人都必需要的。
估计您老兄是不会看 Apache 的 SOAP,而可能看 MS 的 SOAP Toolkit多些。
实际上, 我们 Delphi 6 的 SOAP 远远超过 Apache 的 SOAP 以及 MS 的 SOAP Toolkit。
不用了解WSDL, <SOAP-ENV:Envelope>,<SOAP-ENV:Body> 的细节。阅读几分钟资料,就能
开发 SOAP Server 和 SOAP Client 了。
 
yysun:
请问SQAP是不是Format后的文本,在Delphi6中已经有它的解析器
所以用起来方便,而 一个过客 所说的是指自己用CGI(或其它方法)
解析这个文本(是不是WSDL?)
您讲的 “阅读几分钟资料,就能开发 SOAP Server 和 SOAP Client 了。”
就是指Delphi6将SQAP解释封装了?
SOAP我没了解过,这里请教了
 
yysun:我做了一个程序是for apache soap的。好像有的错误能不能帮我看看。
http://julian_hu.home.chinaren.com/download.html
谢谢了。服务端是apache的samples.addressbook
 
密切关注!!
 
现在才看到这个贴 哎
 
对soap不熟悉,但是很感兴趣,谢谢大家能让我有机会学习
这里真是好地方!
 
后退
顶部