WebService相关

 1.关于概念

简单的说WebService就是一种跨编程语言和跨操作系统平台的远程调用技术。

Web Service技术, 能使得运行在不同机器上的不同应用无须借助附加的、专门的第三方软件或硬件, 就可相互交换数据或集成。依据Web Service规范实施的应用之间, 无论它们所使用的语言、 平台或内部协议是什么, 都可以相互交换数据。

XML,SOAP和WSDL就是构成WebService的三大技术 。

WebService采用Http协议来在客户端和服务端之间传输数据。WebService使用XML来封装数据,XML主要的优点在于它是跨平台的。

WebService通过HTTP协议发送请求和接收结果时,发送的请求内容和结果内容都采用XML格式封装,并增加了一些特定的HTTP消息头,以说明HTTP消息的内容格式,这些特定的HTTP消息头和XML内容格式就是SOAP协议规定的。

WebService服务器端首先要通过一个WSDL文件来说明自己有什么服务可以对外调用。简单的说,WSDL就像是一个说明书,用于描述WebService及其方法、参数和返回值。 WSDL文件保存在Web服务器上,通过一个url地址就可以访问到它。客户端要调用一个WebService服务之前,要知道该服务的WSDL文件的地址。WebService服务提供商可以通过两种方式来暴露它的WSDL文件地址:1.注册到UDDI服务器,以便被人查找;2.直接告诉给客户端调用者。


WebService交互的过程就是,WebService遵循SOAP协议通过XML封装数据,然后由Http协议来传输数据。

2.webservice 参数类型
 

1、基本数据类型

包括: String、Int32、Byte、Boolean、Int16、Int64、Single、Double、Decimal、
DateTime(类似XML中的timeInstant)、 DateTime(类似XML中的date)、DateTime(类似XML中的time)以及XmlQualifiedName(类似XML中的QName)。 
枚举类型  比如: "public enum color { red=1, blue=2 }"

2、基础类型数组,枚举类型数组 上述类型的数组,比如 string[] 和 int[]

3、创建存储复杂对象的类(因为WebServices的复杂对象的传递,一定要借助第三方对象(即自定义对象)来实现)

  传递List、Map、数组、自定义对象

  前提:JavaBean的使用--- 必须是可序列化的。

需要向webservice传递的对象,其中属性也要支持序列化

4、传递图片:

方案一:转换成byte[]数组

方案二:生成Base64编码格式的字符串

建议的写法:

提供一个字符串型的参数,定义JSON格式的数据传递。

3.不同语言开发WebService

(1)C#开发Webservice

在VS(任何版本)中新建一个网站,选择"ASP.NET Web服务"。将项目建好后,命名为Service。建好后你会发现VS已经将框架搭建好了

(2)Java开发WebService

用JAVA开发webservice的方式有很多种,我采用了最简单的一种,比较适合发布简单的服务。就是以servlet的方式将服务发布出去,为了方便起见,我将下载了一个Eclipse的Tomcat插件,将这个插件拷到eclipse的plugins文件夹下,打开Eclipse就可以看见tomcat的图标了,然后再windows->Preferences里配置一下tomcat 的版本与位置即可,这样eclipse就有些类似于Myeclipse了。

我建立了一个Tomcat project(装了上述插件才会有),在WEB-INF/src文件下添加类,我添加了两个类,一个MyService.java,一个WebServiceStarter.java。其中,MyService类用来写各种需要发布的服务,需要引进的包有:

    import javax.jws.WebService;  
    import javax.jws.soap.SOAPBinding;
    import javax.xml.ws.Endpoint; 
    import javax.jws.WebMethod;

还需要在这个类前声明:

@WebService(targetNamespace = "http://jdk.study.hermit.org/client")
@SOAPBinding(style = SOAPBinding.Style.RPC)

在类中,每个要发布的函数前面都要加上声明:

@WebMethod

写好这个类后,写一个servlet类:

import javax.servlet.ServletException;
 import javax.servlet.http.HttpServlet;
 import javax.xml.ws.Endpoint;
public class WebServiceStarter extends HttpServlet {
     private static final long serialVersionUID = 5870534239093709659L;
     
     public WebServiceStarter() {
                  super();
            }
          
             public void destroy() {
                 super.destroy();
              }
          
             public void init() throws ServletException {
                  System.out.println("准备启动服务");
                  Endpoint.publish("http://localhost:8080/MyService", new MyService());
                  System.out.println("服务启动完毕");
             }

然后点击Tomcat小图标就可以在Tomcat下运行了,在浏览器中输入:http://127.0.0.1:8080/MyService?wsdl,看到以下结果:

参考多篇博文

原文地址:https://www.cnblogs.com/songjuntao/p/15674046.html