分享
 
 
 

用SOAP进行远程过程调用(RPC)

王朝other·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

译者注:本人最近一直在学习.NET,对XML及微软倡导的SOAP协议更是情有独衷。因此为了促进自己的学习,也为了和志同道合者进行交流,翻译这篇文章。这是我第一次翻译文章,措词和对专业术语的把握不一定恰当,也不知道能不能发表,如果能有幸献丑,望讨论和指教。

下面是一个关于用简单对象访问协议SOAP(simple object access protocol)进行远程过程RPC(remote procedure call)的例子。发送往Web 服务器(the Web service)请求远程服务的SOAP消息是基于HTTP协议的,并且是采用XML文档格式。Web服务器处理接受到的根据SOAP协议封装的请求(request),然后同样回送给客户端以SOAP协议封装的应答(response)。

POST/ FirstSoap.aspx HTTP/1.1

Host: www.anyserver.com

Content-Type: text/xml; charset="utf-8"

Content-Length:888

SOAPAction: "uri:uniqueuriofthewebservice"

<SOAP-ENV:Envelope

<!-- namespace for envelope -->

xmlns:SOAP-ENV = "http://schemas.xmlsoap.org/soap/envelope">

<!-- namespace for xml schema specification ( for data type declarations) -->

xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance">

<SOAP-ENV:Header>

<MYHEAD:USERID

xmlns:MYHEAD="URI"

SOAP-ENV:mustUnderstand="1">

user email id

</MYHEAD:USERID>

</SOAP-ENV:HEADER>

<SOAP-ENV:Body xmlns:BODYNS="URI1">

<BODYNS:FirstMethod>

<parm1 xsi:type="int">1</parm1>

<parm2 xsi:type="string">Ranjith</parm2>

<parm3 xsi:type="string">Rajadurai</parm3>

</BODYNS:FirstMethod>

<SOAP-ENV:Fault>

<faultcode>server</faultcode>

<faultstring>application error</faultstring>

<faulterror>server name</faultactor>

<detail xmlns:Faultns="URI2">

<Faultns:Message>Wrong number of parameters</Faultns:Message>

<Faultns:ErrorCode>1001</Faultns:ErrorCode>

</detail>

</SOAP-ENV:Fault>

<BODYNS:FirstMethodResponse>

<return>My First RPC responded successfully</return>

</BODYNS:FirstMethodResponse>

</SOAP-ENV:Body>

</SOAP-ENV:Envelope>

上面这个SOAP消息包括以下几个基本元素:

1 报套(Envelope)

2 报头(Header)

3 报体(Body)

所有的SOAP消息都封装在报套(Envelope)这样一个元素之内。为确定范围,每个元素应有命名空间。元素的成员在命名空间内可以被访问。之所以需要命名空间,是为了避免在不同的地方(译者注:此处“不同的地方”,我的理解是不同的Web服务器)有相同的元素名而引起的混乱。

在上面这个SOAP消息中,为了进行权限认证,报头元素传送了用户的Email地址。报头中的“mustUnderstand”属性使得Web服务器要进行权限认证。即处理这个SOAP消息的Web服务器必须要理解报头中的这样一个属性参数。这个属性参数等于1表明,Web服务器在进行处理之前进行权限确认是强制性的,否则,Web服务器将不处理这样一个消息。

报体元素(Body element)包括一个方法,此方法在Web服务器上。这个方法在Web服务器上可以用任何语言进行定义,并包括3个参数,这3中数据类型在命名空间xsi内被定义(译者注:在报头前有这样一句xsi = "http://www.w3.org/2001/XMLSchema-instance,看不太懂的朋友要多看看XML方面的书籍)。如果这样一个SOAP消息封装正确,那么它激活Web服务器上的方法FirstMethod并返回一个值。

如果Web服务器在处理这样一个消息过程中发生错误,将返回一个在报体内有Fault元素的SOAP消息。仅仅在处理时发生错误才传送这样一个消息。当传送数据或参数到Web服务器发生错误时将显示正常的HTTP错误。任何错误的SOAP消息都含有以下四个子元素:

1.faultcode(optional) – 包含发生错误的类型

2.faultstring(optional) – 包含发生错误的起因

3.faultactor – 包含发生错误的服务器名称

4.details – 包含2个子元素.

a. message – 包含详细的错误内容

b. errorcode – 错误代码

当Web服务器执行FirstMethod方法成功之后,它返回一个SOAP消息给客户端,此消息当然也是以XML格式封装。FirstMethodResponse元素包含返回的值。任何应答元素名称都是由调用的方法名加上后缀Response组成。

这SOAP消息以HTTP协议包发送到www.anyserver.com/FirstSoap.aspx,Web服务器上的FirstMethod方法被激活。SoapAction描述了能被唯一激活的Web服务的URI。

译者注:朋友们最好到http://www.w3.org/TR/SOAP/#_Toc478383526详细的看一下Simple Object Access Protocol (SOAP) 1.1,我想会对你学习SOAP有帮助。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有