﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-落叶归根-文章分类-Web Services</title><link>http://www.blogjava.net/allan-oy/category/8485.html</link><description>一个人首先要尊重别人，然后才能得到别人的尊重；一个人首先要对自己负责，然后才有资格去对别人负责。</description><language>zh-cn</language><lastBuildDate>Fri, 02 Mar 2007 05:02:51 GMT</lastBuildDate><pubDate>Fri, 02 Mar 2007 05:02:51 GMT</pubDate><ttl>60</ttl><item><title>熟练调用 Web Service</title><link>http://www.blogjava.net/allan-oy/articles/35381.html</link><dc:creator>落叶归根</dc:creator><author>落叶归根</author><pubDate>Wed, 15 Mar 2006 04:02:00 GMT</pubDate><guid>http://www.blogjava.net/allan-oy/articles/35381.html</guid><wfw:comment>http://www.blogjava.net/allan-oy/comments/35381.html</wfw:comment><comments>http://www.blogjava.net/allan-oy/articles/35381.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/allan-oy/comments/commentRss/35381.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/allan-oy/services/trackbacks/35381.html</trackback:ping><description><![CDATA[<STRONG>什么是</STRONG><A class=bluekey href="http://www.yesky.com/key/3509/278509.html" target=_blank><STRONG>Web Services</STRONG></A>
<P>　　从表面上看，Web service 就是一个应用程序，它向外界暴露出一个能够通过Web进行调用的API。也就是说，可以利用编程的方法通过Web来调用这个应用程序。</P>
<P>　　对Web service 更精确的解释: Web <A class=bluekey href="http://www.yesky.com/key/2009/542009.html" target=_blank>services</A>是建立可互操作的分布式应用程序的新平台。Web service平台是一套标准，它定义了应用程序如何在Web上实现互操作性。你可以用任何你喜欢的语言，在任何你喜欢的平台上写Web service ，只要我们可以通过Web service标准对这些服务进行查询和访问。</P>
<P>　　不管你的Web service是用什么工具，什么语言写出来的，只要你用SOAP协议通过HTTP来调用它，总体结构都一致。通常，你用你自己喜欢的语言(如VB 6或者VB.NET)来构建你的Web service，然后用SOAP Toolkit或者.NET的内建支持来把它暴露给Web客户。于是，任何语言，任何平台上的客户都可以阅读其WSDL文档，以调用这个Web service。客户根据WSDL描述文档，会生成一个SOAP请求消息。Web service都是放在Web服务器 (如IIS) 后面的，客户生成的SOAP请求会被嵌入在一个HTTP <A class=bluekey href="http://www.yesky.com/key/756/595756.html" target=_blank>POST</A>请求中，发送到Web服务器来。Web服务器再把这些请求转发给Web service请求处理器。请求处理器的作用在于，解析收到的SOAP请求，调用Web service，然后再生成相应的SOAP应答。Web服务器得到SOAP应答后，会再通过HTTP应答的方式把它送回到客户端。</P>
<P>　　<STRONG>基本概念</STRONG></P>
<P>　　SOAP</P>
<P>　　XML和XSD</P>
<P>　　WSDL(Web Services Description Language)</P>
<P>　　WSML(Web Services Meta Language)</P>
<P>　　<STRONG>什么时候使用Web Services</STRONG></P>
<P>　　Web service是创建可互操作的分布式应用程序的新平台。Web service 的主要目标是跨平台的可互操作性。为了达到这一目标，Web service 是完全基于XML、XSD等独立于平台、独立于<A class=bluekey href="http://www.yesky.com/key/4778/284778.html" target=_blank>软件供应商</A>的标准的。</P>
<P>　　Web service在应用程序跨平台和跨网络进行通信的时候是非常有用的。Web service适用于应用程序集成、B2B集成、代码和数据重用，以及通过Web进行客户端和服务器的通信的场合。</P>
<P>　　当然，Web service也不是万能的，你不能到处滥用Web service。在有些情况下，Web service 会降低应用程序的性能，而不会带来任何好处。例如，一台机器或一个局域网里面运行的同构应用程序就不应该用Web service 进行通信。</P>
<P>　　<STRONG>如何调用Web Services</STRONG></P>
<P>　　客户端:取得<A class=bluekey href="http://www.yesky.com/key/1011/541011.html" target=_blank>服务端</A>的服务描述文件WSDL，解析该文件的内容，了解服务端的服务信息，以及调用方式。根据需要，生成恰当的SOAP请求消息(指定调用的方法，已经调用的参数)，发往服务端。等待服务端返回的SOAP回应消息，解析得到返回值。</P>
<P>　　服务端:生成服务描述文件，以供客户端获取。接收客户端发来的SOAP请求消息，解析其中的方法调用和参数格式。根据WSDL和WSML的描述，调用相应的COM对象来完成指定功能，并把返回值放入SOAP回应消息返回给用户。</P>
<P>　　<STRONG>高层接口</STRONG></P>
<P>　　使用高层接口，不需要知道SOAP和XML的任何信息，就可以生成和使用一个WebService。Soap Toolkit 2.0通过提供两个COM对象――SoapClient和SoapServer，来完成这些功能。</P>
<P>　　在客户端，只需要生成一个SoapClient实例，并用WSDL作为参数来调用其中的mssoapinit方法。SoapClient对象会自动解析WSDL文件，并在内部生成所有Web Service的方法和参数信息。之后，你就可以像调用IDispatch接口里的方法一样，调用里面所有的方法。在VB或是脚本语言里，你甚至可以直接在SoapClient对象名后面直接加上.方法(参数…)进行调用。<BR><BR><STRONG>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;低层接口</STRONG></P>
<P>　　要使用低层接口，你必须对SOAP和XML有所了解。你可以对SOAP的处理过程进行控制，特别是要做特殊处理的时候。</P>
<P>　　在客户端，首先要创建一个HttpConnector对象，负责HTTP连接。设定Connector的一些头部信息，比如EndPoinURL和SoapAction等。如果网络连接需要使用代理服务器，那也要在这里设定相关的信息。接着创建SoapSerializer对象，用于生成Soap消息。按照WSDL里定义，把所有参数按顺序序列化，得到一个完整的SOAP请求消息。该Soap消息，作为Payload通过HttpConnector被发送到服务端。最后，生成一个SoapReader对象，负责读取服务端返回的SOAP消息，取得其中的返回值。<BR><BR>来源：<A href="http://searchwebservices.techtarget.com.cn/148/2134148_1.shtml">http://searchwebservices.techtarget.com.cn/148/2134148_1.shtml</A></P><img src ="http://www.blogjava.net/allan-oy/aggbug/35381.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/allan-oy/" target="_blank">落叶归根</a> 2006-03-15 12:02 <a href="http://www.blogjava.net/allan-oy/articles/35381.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>