SOAP开发入门 ( 积分: 50 )

S

stepwin

Unregistered / Unconfirmed
GUEST, unregistred user!
来自:
http://www.softboss.com/ForumDetail.asp?ForumID=450
这里不能贴图,请看原文!
1.1. SOAP基础
一、SOAP:Simple Object Application Protocol。
  WEB服务是通过标准的Web协议、以简单对象编程方式可以访问的一个应用程序组件。大家所遵循的这种约定,就称之为SOAP。
标准制定者: http://www.w3.org/2000/xp/Group/ , http://www.w3.org/TR/soap/

二、SOAP开发框架:
不同的技术提供商为SOAP提供有开发模式。
  SUN为支持Web Service制定了JAX-RPC等。听说:J2EE1.4平台是围绕Web Service来构架的。微软是如何支持的,我就不清楚了。
  Apache开源组织为java语言编写SOAP程序,提供了一个既遵循SOAP又非常简单实用的工具库: Axis(有支持java的,也有支持C++的) 。
  详情见:http://ws.apache.org/axis/
  正因为有了这些开源工具类库,才让我们的编程世界变得如此简单!!!

三、SOAP消息结构
  SOAP消息的传输建立在HTTP,SMTP和FTP之上。
HTTP是最外层的信封格式、SOAP是里面的信封格式、XML是信(SOAP)的表现形式。
在"之前的内容,跟一个普通的HTTP一样,"..."之间的内容是附加的,这些内容是以XML格式来表现的。
看到这些标签很可怕吧?在HTTP编程中,如果有sun提供的servlet包,我们编写起来,根本不管这些信息是如何组成的;同样,在SOAP编程中,如果有Axis包,我们也不用管这些信息是如何组成的。

这些知识知道就可以了,如果有兴趣可以去分析开源项目Axis对于SOAP是如何包装的。在JBUILDER中提供了TCP MONITOR工具进行数据分析,在TOOLS菜单下,可以自己去琢磨。

下面开始STEP BY STEP 进行SOAP实战开发。
1.2. 用JBUILDER开发
工具:JBUILDER 9
任务:开发一个简单的SOAP服务端对客户端调用实例。

创建服务端:
STEP1:新建一个空项目,取名为JAVASOAP
STEP2:编写服务端要实现的工作,必须有一个普通的JAVABEAN文件为要作为服务发布的接口文件。在例子中是CHello.JAVA,实现一个简单的操作SayHi,和普通JAVABEAN的写法一样。
STEP3:将这个接口文件打包为WEB服务,并且生成WSDL接口文件。这一步就是不同了,下面有图示:

选FILE->NEW菜单,弹出新建对话筐,选择Web Service页的Export as a Web Service标签


点击OK后弹出一个向导来带领你生成SOAP服务和WSDL文件。


这是要求生成一个提供SOAP服务的WEB应用程序,可以惦记NEW按钮,生产这个WEB服务:


我这里给这个SOAP服务取名叫SOAPSVR。填写完成后点击OK按钮。又回到开始的向导


点击FINISH按钮:


这个向导就是要你选择是哪个类作为接口类提供出去,我们选CHello,然后按照NEXT按钮一路点下去就了,最后你会看到硬盘一通乱转,生成对外接口的CHello.WSDL文件和一个包generated。


CHello.java类就是我们实现的remote远程接口,和RMI、EJB是一个套路。
CHelloService.java类是实现RPC服务器的类。
CHelloServiceLocator.java类是在本地实现和RPC服务器通讯的类,这里面定义了通讯参数,你可以看看,但是最好不要修改。
CHelloServiceTestCase.java类是测试的例子,要先绑定再通过绑定的接口调用接口处理方法,太麻烦了,不要学,下面给一个更简单的方法。
CHelloSoapBindingStub.java类是那个用来绑定的接口类,不用。

得到这一堆东西的时候你的服务就这样做完了。启动这个WEB服务就可以了对外提供SOAP服务了。



创建客户端



按照向导点击下一步步到结束就可以生成一大堆接口类和方法了。


你可看到这里有6个类,是刚才自动生成的,很熟悉吧,这和服务端生成的generated包里面的文件相比就是多了一个CHelloSoapBindingImpl.JAVA文件,这个文件中定义的接口就是我们要用到的,但是不能实际生成这个类的对象来使用,他只是实现了CHello接口,好象没什么用,先不管了。
如何使用这个接口:
先生成服务实例
CHelloServiceLocator hellolocate = new CHelloServiceLocator();
然后通过服务实例获得接口对象
CHello hello = hellolocate.getCHello();
现在可以直接调用这个接口的方法了,就象使用本地的对象的方法一样。我推荐的方法应该是写起来最简单的,至于是不是最有效率最好的我就不知道了,哪位高手可以分析测试一下。
System.out.println(hello.sayHi("钟林大"));
实际上这个调用过程是和SOAP服务进行了一次通讯,服务器也为你做了一次计算。客户端和服务器间的通讯是XML包,不过都被框架屏蔽了,这个框架是我们在前面创建SOAP服务时候缺省选的AXIS。AXIS是一个开源的SOAP框架,值得学习,现在我们只用就好了

现在启动SOAP服务,运行客户端:


是不是很简单?
1.3. 用DELPHI开发
用DELPHI开发SOAP服务比较土,因为要写CGI服务,然后生成对外的WSDL接口文件,DELPHI写WEB服务当然不如JAVA了,所以不推荐,但是我给了一个例子,就不多说了。
用DELPHI写客户端是最好的,可以写应用程序直接连到WEB服务上,最直接的体现网络即服务的思想。

用DELPHI写客户端

Step1:选择file->new->other,弹出新建对话框,选择WebServices页:

选择WSDL Importer,点击OK按钮,弹出导入WSDL文件的向导。


这里我选了前面用JAVA写的SOAP服务接口文档CHello.wsdl,然后一路NEXT按下去就会生成CHello1.pas的接口实现文件。

这个接口使用起来也是很简单,先创建一个THTTPRIO 对象:HTTPRIO1: THTTPRIO;
然后就可以直接使用CHello提供的接口方法了:
showmessage((HTTPRIO1 as CHello).SayHi('钟林大'));
结果是:


当然这个时候需要将SOAP服务启动才可以呀。同样,这里面你的一次点击被提交到了用JAVA写的SOAP服务,然后返回了一个中文信息。完美实现了DELPHI应用程序和WEB服务之间的交互,同样,这中间是怎么通讯的被框架隐藏了。

1.4. 跨语言跨平台开发
你还可以用ASP.net开发SOAP服务端,用C#开发客户端,通过同一个WSDL接口文件进行通讯。SOAP不依赖任何语言和平台,而且他的开源框架保证了开发的简单和有效,应用前景很好,特别是电子商务,基于互联网的WEB服务,在国外很多公司都用来做对外发布信息的接口。
----
软件大佬是基于软件业的研发、学习、交易、管理的网络平台,是您事业开始的地方,请访问www.softboss.com!
 
来自:
http://www.softboss.com/ForumDetail.asp?ForumID=450
这里不能贴图,请看原文!
1.1. SOAP基础
一、SOAP:Simple Object Application Protocol。
  WEB服务是通过标准的Web协议、以简单对象编程方式可以访问的一个应用程序组件。大家所遵循的这种约定,就称之为SOAP。
标准制定者: http://www.w3.org/2000/xp/Group/ , http://www.w3.org/TR/soap/

二、SOAP开发框架:
不同的技术提供商为SOAP提供有开发模式。
  SUN为支持Web Service制定了JAX-RPC等。听说:J2EE1.4平台是围绕Web Service来构架的。微软是如何支持的,我就不清楚了。
  Apache开源组织为java语言编写SOAP程序,提供了一个既遵循SOAP又非常简单实用的工具库: Axis(有支持java的,也有支持C++的) 。
  详情见:http://ws.apache.org/axis/
  正因为有了这些开源工具类库,才让我们的编程世界变得如此简单!!!

三、SOAP消息结构
  SOAP消息的传输建立在HTTP,SMTP和FTP之上。
HTTP是最外层的信封格式、SOAP是里面的信封格式、XML是信(SOAP)的表现形式。
在"之前的内容,跟一个普通的HTTP一样,"..."之间的内容是附加的,这些内容是以XML格式来表现的。
看到这些标签很可怕吧?在HTTP编程中,如果有sun提供的servlet包,我们编写起来,根本不管这些信息是如何组成的;同样,在SOAP编程中,如果有Axis包,我们也不用管这些信息是如何组成的。

这些知识知道就可以了,如果有兴趣可以去分析开源项目Axis对于SOAP是如何包装的。在JBUILDER中提供了TCP MONITOR工具进行数据分析,在TOOLS菜单下,可以自己去琢磨。

下面开始STEP BY STEP 进行SOAP实战开发。
1.2. 用JBUILDER开发
工具:JBUILDER 9
任务:开发一个简单的SOAP服务端对客户端调用实例。

创建服务端:
STEP1:新建一个空项目,取名为JAVASOAP
STEP2:编写服务端要实现的工作,必须有一个普通的JAVABEAN文件为要作为服务发布的接口文件。在例子中是CHello.JAVA,实现一个简单的操作SayHi,和普通JAVABEAN的写法一样。
STEP3:将这个接口文件打包为WEB服务,并且生成WSDL接口文件。这一步就是不同了,下面有图示:

选FILE->NEW菜单,弹出新建对话筐,选择Web Service页的Export as a Web Service标签


点击OK后弹出一个向导来带领你生成SOAP服务和WSDL文件。


这是要求生成一个提供SOAP服务的WEB应用程序,可以惦记NEW按钮,生产这个WEB服务:


我这里给这个SOAP服务取名叫SOAPSVR。填写完成后点击OK按钮。又回到开始的向导


点击FINISH按钮:


这个向导就是要你选择是哪个类作为接口类提供出去,我们选CHello,然后按照NEXT按钮一路点下去就了,最后你会看到硬盘一通乱转,生成对外接口的CHello.WSDL文件和一个包generated。


CHello.java类就是我们实现的remote远程接口,和RMI、EJB是一个套路。
CHelloService.java类是实现RPC服务器的类。
CHelloServiceLocator.java类是在本地实现和RPC服务器通讯的类,这里面定义了通讯参数,你可以看看,但是最好不要修改。
CHelloServiceTestCase.java类是测试的例子,要先绑定再通过绑定的接口调用接口处理方法,太麻烦了,不要学,下面给一个更简单的方法。
CHelloSoapBindingStub.java类是那个用来绑定的接口类,不用。

得到这一堆东西的时候你的服务就这样做完了。启动这个WEB服务就可以了对外提供SOAP服务了。



创建客户端



按照向导点击下一步步到结束就可以生成一大堆接口类和方法了。


你可看到这里有6个类,是刚才自动生成的,很熟悉吧,这和服务端生成的generated包里面的文件相比就是多了一个CHelloSoapBindingImpl.JAVA文件,这个文件中定义的接口就是我们要用到的,但是不能实际生成这个类的对象来使用,他只是实现了CHello接口,好象没什么用,先不管了。
如何使用这个接口:
先生成服务实例
CHelloServiceLocator hellolocate = new CHelloServiceLocator();
然后通过服务实例获得接口对象
CHello hello = hellolocate.getCHello();
现在可以直接调用这个接口的方法了,就象使用本地的对象的方法一样。我推荐的方法应该是写起来最简单的,至于是不是最有效率最好的我就不知道了,哪位高手可以分析测试一下。
System.out.println(hello.sayHi("钟林大"));
实际上这个调用过程是和SOAP服务进行了一次通讯,服务器也为你做了一次计算。客户端和服务器间的通讯是XML包,不过都被框架屏蔽了,这个框架是我们在前面创建SOAP服务时候缺省选的AXIS。AXIS是一个开源的SOAP框架,值得学习,现在我们只用就好了

现在启动SOAP服务,运行客户端:


是不是很简单?
1.3. 用DELPHI开发
用DELPHI开发SOAP服务比较土,因为要写CGI服务,然后生成对外的WSDL接口文件,DELPHI写WEB服务当然不如JAVA了,所以不推荐,但是我给了一个例子,就不多说了。
用DELPHI写客户端是最好的,可以写应用程序直接连到WEB服务上,最直接的体现网络即服务的思想。

用DELPHI写客户端

Step1:选择file->new->other,弹出新建对话框,选择WebServices页:

选择WSDL Importer,点击OK按钮,弹出导入WSDL文件的向导。


这里我选了前面用JAVA写的SOAP服务接口文档CHello.wsdl,然后一路NEXT按下去就会生成CHello1.pas的接口实现文件。

这个接口使用起来也是很简单,先创建一个THTTPRIO 对象:HTTPRIO1: THTTPRIO;
然后就可以直接使用CHello提供的接口方法了:
showmessage((HTTPRIO1 as CHello).SayHi('钟林大'));
结果是:


当然这个时候需要将SOAP服务启动才可以呀。同样,这里面你的一次点击被提交到了用JAVA写的SOAP服务,然后返回了一个中文信息。完美实现了DELPHI应用程序和WEB服务之间的交互,同样,这中间是怎么通讯的被框架隐藏了。

1.4. 跨语言跨平台开发
你还可以用ASP.net开发SOAP服务端,用C#开发客户端,通过同一个WSDL接口文件进行通讯。SOAP不依赖任何语言和平台,而且他的开源框架保证了开发的简单和有效,应用前景很好,特别是电子商务,基于互联网的WEB服务,在国外很多公司都用来做对外发布信息的接口。
----
软件大佬是基于软件业的研发、学习、交易、管理的网络平台,是您事业开始的地方,请访问www.softboss.com!
 
我也正在研究这个,soap webserveces
 
我有一个想法,以后的CS和BS会结合,成为用WEB服务作服务器,用客户端软件从这个服务器交互数据,也许会通过SOAP交换数据,这样就会在内网外网效果一样了,而且作WEB服务可能最平民的是ASP.NET,因为IIS支持,最豪华稳定的是JAVA,因为有很多厂商支持,作客户端软件界面最好看的是DELPHI,其次是C#,最通用的是java,可以用于任何操作系统。
 
软件大佬改名为国际软件外包管理网了,是定位细化的结果,请继续支持!以后网站会陆续推出一些客户端应用程序来和网站交互,网站以后也会再改版,改用ASP.NET技术来写服务端,通过SOAP和客户端应用程序交互,敬请期待!希望大家一如既往的支持下去!
----
国际软件外包管理网是软件外包管理专家,助您成就知识新贵!请访问www.softboss.com!
 
国际软件外包管理网再次改变版面,总算象一个大站了,速度也提高不少,请访问,请多指教,请参与到我们中间来!
 
顶部