碧荷故乡_胡奇的专栏

清清华堂,碧荷流香。悠悠十载,水木齐昌。鸿儒相往,以为故乡。日月沧沧,不弃不忘。千里殷望,难舍难量。祝纳四方,既寿永康。

胡奇ID:kthq
17778次访问,排名6504(1)好友6人,关注者6
kthq的文章
原创 36 篇
翻译 1 篇
转载 6 篇
评论 32 篇
胡奇(依天把剑)的公告

胡奇 TIBCO CDC
——致力于企业流程管理和应用集成(Workflow, EAI, BPM)领域\面向服务的Web应用模式,及其相关SOA架构和JAVA技术应用
::开源项目::
ClearWork
DocBookBlank

Locations of visitors to this page
最近评论
视频聊天:爱情故事,视频聊天,视频聊天,
视频聊天:爱情故事,视频聊天,视频聊天,
视频聊天:爱情故事,视频聊天,视频聊天,
视频聊天:爱情故事,视频聊天,视频聊天,
视频聊天:爱情故事,视频聊天,视频聊天,
文章分类
收藏
    相册
    Blogger
    Workflow
    俠盜躶奔漢的专栏(RSS)
    胡长城(银狐999)BLOG(RSS)
    存档
    软件项目交易
    订阅我的博客
    XML聚合  FeedSky
    订阅到鲜果
    订阅到Google
    订阅到抓虾
    订阅到BlogLines
    订阅到Yahoo
    订阅到GouGou
    订阅到飞鸽
    订阅到Rojo
    订阅到newsgator
    订阅到netvibes

    原创 SOAP Action揭密收藏

    新一篇: SOA Presentation - SOA概念介绍 | 旧一篇: XPath应用

    最近在工作中遇到一个SOAP Action的问题,正好拿出来研究一把。

    据说SOAPAction header这玩意在SOAP 1.1规范中着实让不少开发者喝了一壶。真的有这么难理解么?我想这应该是因为SOAP有两种非常不同的使用方式,而SOAPAction主要是被用来支持其中应用较少的一种方式的原因。在我看来,这种方式也非常有价值。

    让我们先看看SOAP 1.1规范是怎么定义HTTP SOAPAction header的:

    SOAPAction HTTP request header被用来标识SOAP HTTP请求的目的地,其值是个URI地址。SOAP发送并不限制格式、URI特征或其必须可解析,那么在这种情况下,发送一个HTTP SOAP请求时,其HTTP客户端必须使用/指明SOAPAction HTTP request header。

    SOAPAction header的内容可以被用在服务端,诸如:防火墙适当的过滤基于HTTP的SOAP请求消息等场景。SOAPAction header的值为空串("")表示SOAP消息的目的地由HTTP请求的URI标识;无值则表示没有指定这条消息的目的地

    看了官方的定义,相信大家也迷糊了,迷糊在“目的地”这个词上吧?那么,给它一个准确的说法吧——“确定执行某一行为的路径”。

    看一个SOAP消息的例子:

    <SOAP-ENV:Envelope
      
    xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
      SOAP-ENV:encodingStyle
    ="http://schemas.xmlsoap.org/soap/encoding/">
       
    <SOAP-ENV:Body>
           
    <m:GetLastTradePrice xmlns:m="Some-URI">
               
    <symbol>XYS</symbol>
           
    </m:GetLastTradePrice>
       
    </SOAP-ENV:Body>
    </SOAP-ENV:Envelope>

    很明显的,这条消息指明了要去执行服务端的“GetLastTradePrice”这个方法,开发者不会对此没有疑问,这样看来,SOAP Action也许显得多余了?

    然而,在另一种SOAP消息的发送场景中,却少不了SOAP Action。在这种场景中,SOAP消息并没有显示的指定要调用的服务方法名,而是利用底层的传输协议发送(这样的话,一般会被Web services忽视),例如使用HTTP的Post方式发送的SOAP消息。

    拿AWT组件容器来举个例子吧,我们知道有很多AWT容器,例如:Panel,Box,Window等等,很多情况下,开发者知道他们创建的泛型容器对象下真正是什么对象。那么,假设下面两段代码里的java.awt.Container对象其实是一个Box吧:

    1.

    comp = new TextField( "test" );
    java.awt.Container c 
    = Foo.bar();
    c.add( comp );

    2.

    comp = new TextField( "test" );
    java.awt.Container c 
    = Foo.bar();
    ((java.awt.Panel)c).add( comp );

    以上两段代码产生两种不同的结果。“add()”方法对两者似乎有着相同的意义,但是在代码2中其被扩展为“作为一个Panel对象去add”。所以很明显的,代码2会抛出一个异常,因为我们知道这个对象实际上是Box,而我们的代码期待的是Panel。

    HTTP POST的意义正如这个例子中的“add()”方法一样,HTTP POST提供一个关于SOAPAction如何被使用的索引;而SOAPAction header的值则应该被用来指明这个“扩展”的目的地——这条SOAP/HTTP消息发送者所期待的处理容器的名称(可以这样理解:即相应的API方法)。那么,正如上面那个AWT例子一样,如果这种期待没有被满足,就会产生一个错误。

    注意:在SOAP 1.2规范中,SOAPAction header这个属性被"action"所取代,但其作用和工作原理都没有变化。

    有意思的是,在Tibco的EAI工具BW中,使用SOAP服务端活动必须指定SOAP Action属性,如果引用的原始WSDL没有使用这个属性的话,也必须显示的指明;因此,相应的,其客户端也要注意啦——必须为SOAP Action属性填入期待的URI。OK

    发表于 @ 2007年10月13日 23:27:00|评论(loading...)|编辑

    新一篇: SOA Presentation - SOA概念介绍 | 旧一篇: XPath应用

    评论

    #视频聊天 发表于2008-08-03 07:26:33  IP: 123.14.248.*
    爱情故事,视频聊天,视频聊天,美女视频,美女图片
    发表评论  


    登录
    Csdn Blog version 3.1a
    Copyright © 胡奇(依天把剑)