以文本方式查看主题 - 计算机科学论坛 (http://bbs.xml.org.cn/index.asp) -- 『 Web Services & Semantic Web Services 』 (http://bbs.xml.org.cn/list.asp?boardid=10) ---- 如何区分SOAP Messaging和SOAP RPC (http://bbs.xml.org.cn/dispbbs.asp?boardid=10&rootid=&id=12169) |
-- 作者:lyman -- 发布时间:11/19/2004 2:35:00 PM -- 如何区分SOAP Messaging和SOAP RPC 我是SOAP的初学者,我一直存在这么一个问题:SOAP好像有两种使用方式,即SOAP RPC和 SOAP Messaging,我如何区分它们?SOAP规范中是否对此有显著规定? 例如,现在服务端程序收到客户端的一个SOAP XML文档,我怎么知道它是否发起RPC调用,还是一个一般性的需要应用层解析的消息?如果是RPC调用,我应该能够知道客户端调用哪个或哪些方法,以及每个方法的所有参数把?我以为可以写一段通用的代码来获取方法列表以及每个方法的参数。 |
-- 作者:zhouyg -- 发布时间:11/21/2004 4:45:00 AM -- SOAP Messaging 和 SOAP RPC 都是RPC (Remote proceduce call 远程程序呼唤),即用户端呼唤 服务器上的一个程序,程序在服务器上执行,执行完后有两种可能性 1) 服务器要把执行的结果返回给用户 (这种情况用 SOAP RPC) 2) 服务器不需要返回如何结果给用户 (这种情况用 SOAP Messaging) 其实可以认为SOAP Messaging 是 SOAP RPC 的一种特殊情况, SOAP Messaging 可以实现的都可以用SOAP RPC 来实现,不过SOAP RPC 用起来要复杂一些。 服务器回答:
|
-- 作者:lyman -- 发布时间:11/22/2004 6:44:00 PM -- 这种远程调用的意思我是知道的。我的困惑是文档中有什么规定的标签标明这是一个方法调用,这些是这个方法的参数。举一个具体例子:如下。 <soap:Envelope xmlsns:soap="http://schema.xmlsoap.org/soap/envelope/" soap:encodingStyle="http://schema.xmlsoap.org/soap/encoding/" xmlns:cwmp="urn:dslforum-org:cwmp-1-0"> <soap:Header> <cwmp:ID soap:mustUnderstand="1">1234</cwmp:ID> </soap:Header> <soap:Body> <cwmp:GetParameterValuesResponse> <ParameterList soap:arrayType="cwmp:ParameterValueStruct[4]"> <ParameterValueStruct> <name>ADSLCPE.DeviceInfo.Manufacture</name> <value xsi:type="xsd:string">Alpha Telecom Inc.</value> </ParameterValueStruct> <ParameterValueStruct> <name> ADSLCPE.DeviceInfo.ManufactureOUI</name> <value xsi:type="xsd:string">0006D3</value> </ParameterValueStruct> <ParameterValueStruct> <name> ADSLCPE.DeviceInfo.ModelName</name> <value xsi:type="xsd:string">Arion3100</value> </ParameterValueStruct> <ParameterValueStruct> <name> ADSLCPE.DeviceInfo.Description</name> <value xsi:type="xsd:string">ADSL Modem</value> </ParameterValueStruct> </ParameterList> </cwmp:GetParameterValuesResponse> </soap:Body> </soap:Envelope> 请问: GetParameterValuesResponse是一个方法名吗?看起来是的。但是我的XML解析程序怎么知道这就是一个方法名?难道GetParameterValuesResponse是一个SOAP规范预定义好的标签吗?(显然不是!)同样的道理,ParameterList,ParameterValueStruct是参数,我们人为也许能够看出这些是参数,但是解析程序怎么知道这是参数?它根据什么来判断?这正是我不能理解的! |
-- 作者:usabcd -- 发布时间:11/23/2004 11:49:00 AM -- RPC是指远程方法调用, Messaging一般认为是直接传递消息,这个消息一般指现成的xml文档。 2种方式有各自的应用场景。 RPC使用比较自然直观,在实际开发时,先完成服务端,服务端完成后会提供一个 叫做WSDL的文档给客户端开发人员。客户端开发人员根据WSDL文档确定 这个Web Service的各种特性,包括调用方式,方法名,参数等。 客户端开发人员常常借助SDK工具将WSDL描述转化为本地开发语言的代码原型。 在原型代码中可以清楚看到所使用的方法和参数。 值得注意的是,RPC方式中间的xml解析过程对两端的开发人员都是透明的, 他们并不需要了解具体的细节,这些都是由Web Service容器实现的。 他们只是象平常一样做普通的函数调用而已。 |
-- 作者:lyman -- 发布时间:11/26/2004 3:31:00 PM -- 非常感谢,这么说来我有些明白了。不过我还觉得似乎还有问题。在我现在参与的一个项目中,我们要写SOAP服务端,要打交道的客户端是一台ADSL设备(遵从的规范是TR-069),似乎没有WSDK, Web Services容器这些概念,只有SOAP的应用。等有时间再来阐述。 |
-- 作者:anjie8484 -- 发布时间:11/7/2005 3:45:00 PM -- RPC一般是同步的 消息一般是传输在工作流中吧? |
-- 作者:xpez -- 发布时间:11/24/2005 10:48:00 AM -- 楼主应该是开发ACS的吧,那你应该看下TR069这个技术文档。你举的这个例子, 在TR069里有很详细的描述啊。在TR069的A.3.3.2这个section规定了GetParameterValues是CPE(也就是客户端的ADSL设备等)必须支持的rpc methods,这个方法只能被ACS发起调用,同时也规定了GetParameterValuesResponse就是CPE的回应。你收到的这个SOAP ENV实际就是CPE对ACS的GetParameterValues调用的回应。那你收到这个回应后就可以知道CPE当前的一些参数设置,至于ParameterList,ParametervalueStruct的语义和处理方法在TR069的文档里都有规定的。
|
W 3 C h i n a ( since 2003 ) 旗 下 站 点 苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》 |
3,046.875ms |