web service:
1.什么是web service?有什么用?
2.web service的调用原理
3.web service的特点(优缺点)?
4.什么是wsdl?有什么用?
5.什么是soap?有什么用?
6.如何开发和使用一个web服务
什么是web service?有什么用?
一句话,web service是soa的实现,它实现了将异构的系统集成并互操作
作用: 没有语言约束,不依赖平台,实现资源共享,节省重复的开发
例如:一个c++开发的系统,发布为web服务,一些另外的系统需要使用这个服务,拿来用就可以了,不用管它是用什么语言开发的在什么平台上开发的
web service的实现原理?(如何实现的?):
服务如何实现呢?
需要解决两个问题:
1.这是个什么服务:服务的发布者需要对服务进行描述(就是要说明这个应用的功能)
2.如何使用这个服务:有一个标准(制定一个调用的API或标准)
第一个问题:由公共接口+wsdl(web服务描述语言)技术解决
第二个问题:uddi(统一描述,查找,集成的标准)+soap技术解决
什么是uddi?什么是soap?什么是wsdl?
Wsdl:描述web服务的功能的,是描述web服务功能的语法标准
Soap:简单对象访问协议,是一个通讯协议,基于xml开发的,按照这个协议来告诉使用者如何使用该web服务
Uddi:用来查找internet上的web service的
客户调用服务(查找:uddi)--服务注册器(描述服务:wsdl)--找到服务后与服务绑定(绑
定:soap)
事实上不用服务注册器uddi也不影响web服务的发布与使用
web service的特点(优缺点)?
优点:资源共享,跨语言,跨平台
缺点:Web Service在通过Web进行互操作或远程调用的时候是最有用的.不过,也有一些
情况,Web Service根本不能带来任何好处
短处一:单机应用程序
目前,企业和个人还使用着很多桌面应用程序。其中一些只需要与本机上的其它程
序通信。在这种情况下,最好就不要用Web Service,只要用本地的API就可以了。
COM非常适合于在这种情况下工作,因为它既小又快。运行在同一台服务器上的服务器
软件也是这样。最好直接用COM或其它本地的API来进行应用程序间的调用。当然Web
Service也能用在这些场合,但那样不仅消耗太大,而且不会带来任何好处。
短处二:局域网的同构应用程序
在许多应用中,所有的程序都是用VB或VC开发的,都在Windows平台下使用COM,都
运行在同一个局域网上。例如,有两个服务器应用程序需要相互通信,或者有一个Win32或WinForm的客户程序要连接局域网上另一个服务器的程序。在这些程序里,使用DCOM会比SOAP/HTTP有效得多。与此相类似,如果一个.NET程序要连接到局域网上的另一个.NET程序,应该使用.NET remoting。有趣的是,在.NET remoting中,也可以指定使用SOAP/HTTP来进行Web Service 调用。不过最好还是直接通过TCP进
行RPC调用,那样会有效得多
什么是wsdl?有什么用?
Web服务描述语言,用来定义web服务具体提供的服务功能的,体现为公共接口
什么是soap?有什么用?
互操作协议,通常情况下是通过http传输协议进行传输的
例如:人起立坐下看为一个服务,那么这个服务的互操作协议是发出命令,说坐下或者起立这个命令服务就执行,这个指令就是互操作协议,也就是soap,那么这个指令怎么发送的呢?通过声音,那么声音就是传输协议,通常情况下传输协议使用的是http协议,当然也可以使用其它的协议
Soap说明如果使用该服务那么应该执行什么样的标准,也就是如何使用服务
web服务背景:
如何实现互操作涉及到两个问题:
1.公共接口:描述服务
2.互操作协议:怎么使用,提供一个使用服务的标准,这个标准的统一的标准,不依赖语
言,ejb中叫做远程方法调用协议
例如:中国人,美国人,西班牙人 他们之间的互操作协议为 英语,web服务使用的协议就
是这样的统一的标准协议,因为web服务是基于xml的,所以说所有的服务使用的语言都
向xml映射
web服务和web应用的区别:
web应用是人机交互,web服务是应用对应用,例如:我的网站需要天气预报的功能,那么就可以订阅提供天气预报的web service
web服务以后是个趋势,但是现在技术还不完善,主要是企业级的质量服务没有完善(如:
安全,事务)
web服务的角色:
服务的提供者:提供一个wsdl给服务注册器
服务的请求者:uddi这个协议去找
服务的注册器:uddi注册,一些列服务的列表,请求者可以到这里来查找需要的服务,找
到后,邦定到具体的服务上,邦定到具体的协议,这就是邦定
uddi:统一描述发布集成
公共接口的标准:wsdl web服务描述语言
如何开发和使用一个web服务:
将ejb的无状态sessionbean发布为web服务
1.开发sessionbean
2.将sessionbean发布为web service
3.开发web服务客户端
4.写客户代码调用web服务
将无状态的sessionbean发布为web service
/*
* HelloBean.java
*
* Created on 2007 年6 月7 日 , 下午9:04
*
* To change this template, choose Tools | Template Manager
* and open the template in the editor.
*/
package session;
import javax.ejb.Stateless;
import javax.jws.WebMethod;
import javax.jws.WebService;
/**
*
* @author yuchen
*/
@Stateless()
@WebService(serviceName="Greeter",portName="GreeterPort")
public class HelloBean {
@WebMethod
public String hello(){
System.out.println("helloworld");
return "helloworld!";
}
}
创建web service client,ide工具帮助我们实现配置文件
调用web服务
package we;
import java.net.MalformedURLException;
import java.net.URL;
import javax.xml.namespace.QName;
import javax.xml.ws.Service;
import testservice.*;
/**
*
* @author yuchen
*/
public class Main {
/** Creates a new instance of Main */
public Main () {
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) throws MalformedURLException {
// TODO code application logic here
URL wsdlLocation=new URL("http://127.0.0.1:8081/Greeter/HelloBean?
WSDL");
QName serviceNameQ=new QName("http://session/","Greeter");
Service service=Service.create(wsdlLocation,serviceNameQ);
HelloBean firstGreetPort=service.getPort(HelloBean.class);
System.out.println("1:"+firstGreetPort.hello());
}
}
serviceName=”Greeter”
nameSpace=http://session/
portType=”HelloBean”
像这些值,可以在wsdl.xml文件中找到
Xml文件,通过建立web service client IDE帮助创建完成