📄 soap5.htm
字号:
<TBODY>
<TR>
<TD class=main_tdbgall vAlign=top><!--网页中部左栏文章内容代码开始-->
<TABLE class=main_title_760 style="WORD-BREAK: break-all" cellSpacing=0
cellPadding=0 width="100%" align=center border=0>
<TBODY>
<TR>
<TD vAlign=center> <STRONG>SOAP Version 1.2中文手冊(5)</STRONG></TD>
<TD
align=right> <FONT
color=#009999></FONT></TD></TR></TBODY></TABLE>
<TABLE class=main_tdbg_575 style="WORD-BREAK: break-all" cellSpacing=0
cellPadding=0 width="100%" align=center border=0>
<TBODY>
<TR vAlign=center align=middle>
<TD class=main_ArticleTitle style="WORD-BREAK: break-all" colSpan=2
height=30>SOAP Version 1.2中文手冊(5)</TD></TR>
<TR vAlign=center align=middle>
<TD class=main_ArticleSubheading style="WORD-BREAK: break-all"
colSpan=2></TD></TR>
<TR class=Article_tdbgall align=middle>
<TD colSpan=2>作者:佚名 文章来源:不详 点击数:
<SCRIPT language=javascript src="soap5.files/GetHits.htm"></SCRIPT>
更新时间:2006-6-11 <A
title=收藏的网页将被永久地保存到新浪ViVi收藏夹http://vivi.sina.com.cn
href="javascript:d=document;t=d.selection?(d.selection.type!='None'?d.selection.createRange().text:''):(d.getSelection?d.getSelection():'');void(vivi=window.open('http://vivi.sina.com.cn/collect/icollect.php?pid=2008&title='+escape(d.title)+'&url='+escape(d.location.href)+'&desc='+escape(t),'vivi','scrollbars=no,width=480,height=480,left=75,top=20,status=no,resizable=yes'));vivi.focus();"><IMG
src="soap5.files/vivi_coop1.gif" align=absMiddle border=0></A></TD></TR>
<TR class=Article_tdbgall align=middle>
<TD colSpan=2>
<SCRIPT language=javascript src="soap5.files/9.js"></SCRIPT>
<BR><BR>
<SCRIPT type=text/javascript><!--
google_ad_client = "pub-6946608638054115";
google_ad_width = 468;
google_ad_height = 15;
google_ad_format = "468x15_0ads_al_s";
google_ad_channel ="";
google_color_border = "FFFFFF";
google_color_bg = "FFFFFF";
google_color_link = "940F04";
google_color_text = "000000";
google_color_url = "008000";
//--></SCRIPT>
<SCRIPT src="soap5.files/show_ads.js" type=text/javascript>
</SCRIPT>
<BR><BR></TD></TR>
<TR>
<TD id=fontzoom style="WORD-BREAK: break-all" vAlign=top colSpan=2
height=300>
<TABLE cellSpacing=0 cellPadding=10 align=left border=0>
<TBODY>
<TR>
<TD>
<SCRIPT type=text/javascript><!--
google_ad_client = "pub-6946608638054115";
google_ad_width = 300;
google_ad_height = 250;
google_ad_format = "300x250_as";
google_ad_type = "text_image";
google_ad_channel ="";
google_color_border = "FFFFFF";
google_color_bg = "FFFFFF";
google_color_link = "CC0000";
google_color_text = "000000";
google_color_url = "0066CC";
//--></SCRIPT>
<SCRIPT src="soap5.files/show_ads.js" type=text/javascript>
</SCRIPT>
<BR><BR>精彩推荐>>>
<SCRIPT language=javascript src="soap5.files/10.js"></SCRIPT>
</TD></TR></TBODY></TABLE>6. 在HTTP中使用SOAP
<P></P>
<P><BR>本节描述了如何在使用或不使用HTTP Extension
Framework的前提下将SOAP与HTTP的协同工作机制。将SOAP绑定在HTTP上可以利用HTTP丰富的特性集,提供使用SOAP形式方法和分布适应性的优点。将SOAP在HTTP上传输并不以为着SOAP可以完全超越HTTP的语义,更恰当的描述应当是SOAP的语义通过HTTP的映射而很自然地成为HTTP的语义。</P>
<P></P>
<P>SOAP很自然地利用HTTP的请求/响应消息模型,将SOAP请求的参数放在HTTP请求里,而将SOAP响应的参数放在HTTP响应里面。注意,无论如何,SOAP的中间介与HTTP中间介是不同的。也就是说,根据HTTP
Connection头字段来寻址的HTTP中间介一般并不能来处理HTTP请求中的SOAP实体体。</P>
<P></P>
<P>当需要将SOAP消息体包含在HTTP消息中时,HTTP应用程序必须依照RFC2376[3]使用媒体类型“text/xml”。</P>
<P></P>
<P>6.1 SOAP HTTP请求</P>
<P><BR>虽然SOAP可以和多种HTTP请求方法联合使用,但这里的绑定只定义了SOAP是如何在HTTP
Post请求中传输的。(可参阅section 7了解如何在RPC中使用SOAP,以及section 6.3如何使用HTTP
Extension Framework)</P>
<P></P>
<P>6.1.1 HTTP Header中的SOAPAction字段</P>
<P><BR>SOAPAction HTTP请求头字段(header field)可以用于指示SOAP
HTTP请求的目的。它的值是一个标识该目的的URI。SOAP对于格式上并没有严格的限制,同时对URI的描述以及是否要是可解析的都没有严格的限制。当发出SOAP
HTTP请求时,HTTP客户必须使用该头字段。</P>
<P></P>
<P><BR><BR>soapaction <BR>= <BR>"SOAPAction" ":" [ <">
URI-reference <"> ] </P>
<P><BR>URI-reference <BR>= <BR><as defined in RFC 2396 [4]>
</P>
<P><BR>SOAPAction头字段的存在及其内容可以被服务器例如防火墙用于在HTTP中过滤SOAP请求消息。当该字段的值为空字符串(
“”)时,则意味着SOAP消息的目的由HTTP Request-URI来提供。而如果没有值则表示对消息的目的没有指示。</P>
<P></P>
<P>例如:</P>
<P></P>
<P></P>
<P>Example 42</P>
<P><BR>SOAPAction:
"http://electrocommerce.org/abc#MyMessage"SOAPAction:
"myapp.sdl"SOAPAction: ""SOAPAction:</P>
<P><BR>Examples of values for SOAPAction</P>
<P><BR>6.2 SOAP HTTP响应</P>
<P><BR>在HTTP之上的SOAP遵从用于在HTTP中表示通讯状态的HTTP状态代码的语义。例如,2xx状态代码表明这是客户端包含SOAP构件的请求被成功的接收、理解和接受等等。</P>
<P></P>
<P>当处理请求的时候发生SOAP错误的时候,SOAP HTTP服务器必须发出一个HTTP 500 “Internal Server
Error”响应同时在包含于该响应的SOAP消息中应包含一个SOAP Fault元素(参阅 section
4.4)来指明SOAP处理的错误。</P>
<P></P>
<P>6.3 HTTP扩展框架</P>
<P><BR>SOAP消息可以与HTTP Extension Framework[6]一起使用来标识SOAP
HTTP请求的出现和意图。</P>
<P></P>
<P>是使用Extension
Framework还是使用简单HTTP对于通讯各方而言是一个策略及能力的问题。客户端可以通过一个强制扩展声明以及一个“M-”HTTP方法名前缀来强制使用HTTP
Extension Framwork。服务器端可以通过使用 510 “Not Extended” HTTP状态代码来强制使用HTTP
Extension Framework。也就是说,通过一次额外的环游,每个通讯方都可以检测到其他通讯方和因此的动作。</P>
<P></P>
<P>用于使用Extension Framework标识SOAP的扩展标识是:</P>
<P>http://www.w3.org/2001/06/soap-envelope</P>
<P><BR>6.4 SOAP HTTP示例</P>
<P></P>
<P><BR>Example 43</P>
<P><BR>POST /StockQuote HTTP/1.1Content-Type: text/xml;
charset="utf-8"Content-Length: nnnnSOAPAction:
"http://electrocommerce.org/abc#MyMessage"<env:Envelope
xmlns:env="http://www.w3.org/2001/06/soap-envelope" > . .
.</env:Envelope></P>
<P><BR>SOAP HTTP Request Using POST</P>
<P><BR> </P>
<P></P>
<P></P>
<P>Example 44</P>
<P><BR>HTTP/1.1 200 OKContent-Type: text/xml;
charset="utf-8"Content-Length: nnnn<env:Envelope
xmlns:env="http://www.w3.org/2001/06/soap-envelope" > . .
.</env:Envelope></P>
<P><BR>SOAP HTTP Response to Example 43</P>
<P><BR> </P>
<P></P>
<P></P>
<P>Example 45</P>
<P><BR>M-POST /StockQuote HTTP/1.1Man:
"http://www.w3.org/2001/06/soap-envelope"; ns=NNNNContent-Type:
text/xml; charset="utf-8"Content-Length: nnnnNNNN-SOAPAction:
"http://electrocommerce.org/abc#MyMessage"<env:Envelope
xmlns:env="http://www.w3.org/2001/06/soap-envelope" > . .
.</env:Envelope></P>
<P><BR>SOAP HTTP Request using the experimental HTTP Extension
Framework</P>
<P><BR> </P>
<P></P>
<P></P>
<P>Example 46</P>
<P><BR>HTTP/1.1 200 OKExt:Content-Type: text/xml;
charset="utf-8"Content-Length: nnnn<env:Envelope
xmlns:env="http://www.w3.org/2001/06/soap-envelope" > . .
.</env:Envelope></P>
<P><BR>SOAP HTTP Response to Example 45</P>
<P><BR>7. 在RPC中使用SOAP</P>
<P><BR>SOAP的一个设计目标就是要利用XML的可扩展性和可伸缩性来包装和交换RPC调用。本节定义了一个统一的远程过程调用和响应的表示。</P>
<P></P>
<P>其实我们也可以预想到在RPC环境下的表示很可能是与在其他表示中定义的编码风格结合。SOAP encodingStyle属性(参阅
section 4.3.2)可以被用于指明在本节表示中使用的方法调用/响应的编码风格。</P>
<P></P>
<P>在RPC中使用SOAP与SOAP协议绑定(参阅 section
6)基本是正交的。在使用HTTP作为SOAP协议绑定媒介的情况下,一个RPC调用可以很自然地映射到一个HTTP请求,而RPC响应则可以映射到HTTP响应。无论如何,使用SOAP方式的RPC并不限于HTTP协议绑定。</P>
<P></P>
<P>为实施一个方法调用,需要以下信息:</P>
<P></P>
<P></P>
<P></P>
<P>目标SOAP结点的URI</P>
<P></P>
<P></P>
<P>方法名</P>
<P></P>
<P></P>
<P>可选的方法或过程的特征</P>
<P></P>
<P></P>
<P>方法或过程的参数</P>
<P></P>
<P></P>
<P>可选的头数据</P>
<P></P>
<P>SOAP依赖协议绑定来提供传送URI的机制。例如,对HTTP而言,请求URI指明了与该调用相对应的资源。除要求该URI是合法的以外,SOAP对于该地址没有任何限制(参阅[4]以获得URI的更多信息)。</P>
<P></P>
<P>7.1 RPC和SOAP Body</P>
<P><BR>RPC调用和响应都是在SOAP Body元素(参阅 section 4.3)中传送,使用如下表示方式:</P>
<P></P>
<P></P>
<P></P>
<P>一个方法调用被建模成一个结构struct。</P>
<P></P>
<P></P>
<P>该方法调用显示为一个简单结构struct,包含每个[in]或[in/out]参数的存取标识。该结构的名和类型可使用过程或方法的名来标识。</P>
<P></P>
<P></P>
<P>每个[in]或[in/out]参数都被表示为一个存取标识,该存取标识的名和类型都对应于相应参数的名和类型。他们的次序也是按照原来RPC中的次序。</P>
<P></P>
<P></P>
<P>一个方法响应被建模成一个结构struct。</P>
<P></P>
<P></P>
<P>该方法响应显示为一个简单结构struct,包含每个[out]或[in/out]参数的存取标识。而第一个存取标识是返回值,而随后则是按照原来次序的返回参数。</P>
<P></P>
<P></P>
<P>每个[out]或[in/out]参数都被表示为一个存取标识,该存取标识的名和类型都对应于相应参数的名和类型。返回值的存取标识名并没有多少语义。同样的,结构的名也并没有多少语义。当然,无论如何,在添加了“Response”字串的方法名后,要有一个约定来命名它。</P>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -