日期:2014-05-17  浏览次数:20712 次

webservice的工作原理
这几天一直在研究webservice 但是我只知道 它是基于SOAP协议进行传输的,它的基本原理是什么?怎么和Java程序进行交互。

------解决方案--------------------
是基于HTTP协议传输的!

SOAP只是所传输内容的一种封装协议,也可以不用,直接传文本过去也可

看以下两个类
URLConnection
HTTPConnection
------解决方案--------------------
就是向 endpoint 发送 SOAP XML 的 POST 请求。
------解决方案--------------------
无非就是把请求封装到xml里面,也就soap,发到服务器,服务器解析这个xml,调用相应的方法,然后将结果再封装成xml传回客户端,客户端再解析,弄成需要的结果类型,就这么简单


有人写socket应用自定义报文差不多就这么干的,只不过soap是个标准而已,我用JAX-WS的服务,客户端JAX-PRC可以解析,而自定义报文只有自己才知道了
------解决方案--------------------
说到底,都是通过socket。呵呵
------解决方案--------------------
WebService是一种可以接收从Internet或者Intranet上的其它系统中传递过来的请求,轻量级的独立的通讯技术。
这种技术允许网络上的所有系统进行交互。随着技术的发展,一个Web服务可以包含额外的指定功能并且可以在多个B2B应用中协作通讯。 Web服务可以理解请求中上下文的关系,并且在每一个特定的情况下产生动态的结果。这些服务会根据用户的身份,地点以及产生请求的原因来改变不同的处理, 用以产生一个唯一的,定制的方案。这种协作机制对那些只对最终结果有兴趣的用户来说,是完全透明的。   
UDDI 
UDDI是一种根据描述文档来引导系统查找相应服务的机制。在用户能够调用Web服务之前,必须确定这个服务内包含哪些商务方法,找到被调用的接口定义,还要在服务端来编制软件。Web服务供应商可以注册他们的服务。 用户查找并定位他们需要的服务。UDDI利用SOAP消息机制(标准的XML/HTTP)来发布,编辑,浏览以及查找注册信息。它采用XML格式来封装各种不同类型的数据,并且发送到注册中心或者由注册中心来返回需要的数据。   
WSDL 
对于商业用户来说,要找到一个自己需要使用的服务,他必须知道如何来调用。 WSDL (Web Services Description Language) 规范是一个描述接口,语义以及Web服务为了响应请求需要经常处理的工作的XML文档。这将使简单地服务方便,快速地被描述和记录。
它包含了以下的关键信息: 消息的描述和格式定义可以通过XML文档中的<types>和<message> 标记来传送。 <portType> 标记中表示了消息传送机制。 (e.g. request-only, request-response, response-only) 。 <binding> 标记指定了编码的规范 。 <service> 标记中表示服务所处的位置 (URL)。 WSDL在UDDI中总是作为一个接口描述文档。因为UDDI是一个通用的用来注册WSDL规范的地方,UDDI的规范并不限制任何类型或者格式描述文 档。这些文档可能是一个WSDL文档,或者是一个正规的包含导向文档的Web页面,也可能只是一个包含联系信息的电子邮件地址。现在Java提供了一个 Java API for WSDL (JWSDL)规范。它提供了一套能快速处理WSDL文档的方法,并且不用直接对XML文档进行操作,它会比JAXP更方便,更快速。   
SOAP 
当用户通过UDDI找到你的WSDL描述文档后,他通过可以Simple Object Access Protocol (SOAP) 调用你建立的Web服务中的一个或多个操作。 SOAP是XML文档形式的调用商业方法的规范,它可以支持不同的底层接口,象HTTP(S)或者SMTP。 之所以使用XML是因为它的独立于编程语言,良好的可扩展性以及强大的工业支持。之所以使用HTTP是因为几乎所有的网络系统都可以用这种协议来通信,由 于它是一种简单协议,所以可以与任何系统结合,还有一个原因就是它可以利用80端口来穿越过防火墙。 SOAP的强大是因为它简单。SOAP是一种轻量级的,非常容易理解的技术,并且很容易实现。它有工业支持,可以从各主要的电子商务平台供应商那里获得。 从技术角度来看,SOAP详细指明了如何响应不同的请求以及如何对参数编码。一个SOAP封装了可选的头信息和正文,并且通常使用HTTP POST方法来传送到一个HTTP 服务器,当然其他方法也是可以的,例如SMTP。SOAP同时支持消息传送和远程过程调用。以下是一个SOAP请求。 
POST /StockQuote HTTP/1.1Host: www.stockquoteserver.comContent-Type: text/xml; charset="utf-8"Content-Length: nnnn SOAPAction: "Some-URI" <SOAP-ENV:Envelope    xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"    SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>    <SOAP-ENV:Header>        <t:Transaction xmlns:t="some-URI" SOAP-ENV:mustUnderstand="1">           5        </t:Transaction>    </SOAP-ENV:Header>    <SOAP-ENV:Body>        <m:GetLastTradePrice xmlns:m="Some-URI">            <symbol>SUNW</symbol>        </m:GetLastTradePrice>    </SOAP-ENV:Body></SOAP-ENV:Envelope> 
JAXR 
为了支持UDDI在Java平台上的功能,Java APIs for XML Registries (JAXR)允许开发者来访问注册中心。 值得注意的是,JAXR并不是建立Web服务必需的,你可以利用其他常用的XML APIs来直接集成这些协议。 JAXR是一个方便的API,它提供了Java API来发布,查找以及编辑那些注册信息。它的重点在于基于XML的B2B应用,复杂的地址本查找以及对XML消息订阅的支持等Web服务。 它也可以用来访问其他类型的注册中心,象ebXML注册中心。这些对Web服务的注册信息进行的操作,可以使用当前的一些Web服务工具来完成(例如第三方的SOAP和ebXML消息工具)。另外,当JAXP提供了一致并具有针对性的API来完成这些操作,这将使开发变得更加容易。