Y
yysun
Unregistered / Unconfirmed
GUEST, unregistred user!
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 客户器.
令人为之精神振奋.
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 客户器.
令人为之精神振奋.