Webservice

Webservice是使应用程序以与平台和编程语言毫无干系的章程开展交互通讯技术。

eg:站点提供访问的数据接口:微博博客园、Taobao。

合法表明:它是一种创设应用程序的科普模型,可以在其他匡助互连网通讯的操作系统中执行运维;它是一种新的web应用程序分支,是自包涵、自描述、模块化的拔取,能够发布、定位、通过web调用。WebService是三个施用组件,它逻辑性的为其它应用程序提供数据与服务.各应用程序通过网络协议和明确的一些正经数量格式(Http,XML,Soap)来走访WebService,通过Web瑟维斯内部实施得到所需结果.Web
Service可以执行从简单的乞请到复杂商务处理的其余成效。一旦布署以往,别的Web瑟维斯应用程序可以窥见并调用它布置的服务。

 XML 1

SOAP(Simple Object Access
Protocol):不难对象访问协议是在疏散或分布式的条件中沟通音讯并推行长途进度调用的轻量级协议,是二个根据XML的合计。使用SOAP,不用考虑其余特定的传导协议(最常用的要么HTTP协议),可以允许其他类型的对象或代码,在任何平台上,以其他一种语言互相通讯。

WSDL:Web Services Description
Language的缩写,是3个用来描述Web服务和验证怎么着与Web服务通讯的XML语言。为用户提供详细的接口表达书。

Axis:Axis本质上就是3个SOAP引擎(Apache Axis is an implementation of
the
SAOP),提供成立服务名、客户端和网关SOAP操作的为主框架。可是Axis并不完全是一个SOAP引擎,它还包含:

  • 是1个独门的SOAP服务器。
  • 是三个松手Servlet引擎(eg:汤姆cat)的服务器。
  • 支持WSDL。
  • 提供转账WSDL为Java类的工具。
  • 提供例子程序。
  • 提供TCP/IP数据包监视工具。

Axis有四种Service styles,分别是:

  • CR-VPC(Remote Procedure Call
    Protocol远程访问调用协议,安插时属于暗许选项)
  • Document
  • Wrapped
  • Message

WSDD(Web Service Deployment
Descriptor):Web服务分布描述,它定义了Web服务的接口,如服务名、提供的不二法门、方法的参数音讯。

UDDI(Universal Description,Discovery,and
Integration):统一描述、发现和购并,用于集中存放和摸索WSDL描述文件,起着目录服务器的功用。

 XML 2

 

WSDL元素

WSDL成分基于XML语法描述了与服务拓展互动的骨干成分:

Type(新闻类型):数据类型定义的器皿,它利用某连串型系统(如XSD)。

Message(新闻):通讯数据的虚幻类型化定义,它由二个要么七个part组成。

Part:音讯参数

Operation(操作):对服务所协助的操作举行抽象描述,WSDL定义了五种操作:

  • 一边(one-way):端点接受信息;
  • 请求-响应(request-response):端点接受音讯,然后发送有关音信;
  • 须要-响应(solicit-response):端点发送音讯,然后接受有关新闻;
  • 通报(notification):端点发送消息。

Port Type (端口类型):特定端口类型的切实磋商和数码格式规范。

Binding:特定端口类型的现实性协议和数量格式规范

Port :定义为绑定和网络地址组合的单个端点。

Service:相关端口的联谊,包蕴其关联的接口、操作、音讯等。

 XML 3

如上类图表明了Service、Port、Binding、Operation、Message之间的着重、关联、聚合、合成、泛化、落成,那里暂不多说,若感兴趣,请参见该小说

UML类图关系大全:http://www.cnblogs.com/riky/archive/2007/04/07/704298.html

WSDL伪代码

WSDL 文档是利用这几个重点的因平昔讲述有些 web service 的:

元素 定义

web service 执行的操作

<message> web service 使用的消息
<types> web service 使用的数据类型
<binding> web service 使用的通信协议
一个 WSDL 文档的主要结构是类似这样的:
<definitions>
<types>
definition of types........
</types>
<message>
definition of a message....
</message>
<portType>
definition of a port.......
</portType>
<binding>
definition of a binding....
</binding>
</definitions>

 

WSDL 文档可含蓄其余的因素,比如 extension 成分,以及多个 service
成分,此成分可把多少个 web services 的概念组合在三个单一的 WSDL 文档中

实践

为了形成显然的相比较,客户端用CS架构来创立客户端。

履行之一:创立服务端

创建ASP.NET Web服务

 XML 4

代码示例

using System;
using System.Linq;
using System.Web;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.Xml.Linq;

using DotNet.Model;
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
// 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消对下行的注释。
// [System.Web.Script.Services.ScriptService]
public class Service : System.Web.Services.WebService
{
    public Service () {
        //如果使用设计的组件,请取消注释以下行
        //InitializeComponent();

    }
     [WebMethod(Description="获取字符串",MessageName="HelloWorld")]
    public string HelloWorld() {
        return "Hello World";
    }

    [WebMethod(Description="获取用户信息",MessageName="getCustomer")]
    public Customer getCustomer(Customer cus1)
    {
        return cus1;
    }

    [WebMethod(Description = "获取用户信息以参数形式", MessageName = "getCustomerFromParams")]
    public Customer getCustomerFromParams(int id, string name, string address)
    {
        Customer cus1 = new Customer();
        cus1.cus_id = id;
        cus1.cus_name = name;
        cus1.cus_address = address;
        return cus1;
    }

}

 

实践之二:创制客户端

创建ASP.NET WEB客户端(以CS架构)

 XML 5

代码示例

 (其中一种格局经过创办“服务引用”的格局,输入“http://localhost:端口号/XX.asmx?wsdl”方式,获得服务访问接口)

      private ServiceReference1.ServiceSoapClient myclient = new ServiceReference1.ServiceSoapClient();

        private void button1_Click(object sender, EventArgs e)
        {
            try
            {
                /* 第一种方式可以传参、传实体,返回实体 */
                ServiceReference1.ServiceSoapClient myclient = new ServiceReference1.ServiceSoapClient();
                ServiceReference1.Customer tem = new ServiceReference1.Customer();
                tem.cus_id = int.Parse(textBox1.Text);
                tem.cus_name = textBox2.Text;
                tem.cus_address = textBox3.Text;
                string str = JsonHelper.Jso_ToJSON(myclient.getCustomer(tem));
                richTextBox1.Text = str;
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        private void button2_Click(object sender, EventArgs e)
        {
            richTextBox1.Text = string.Empty;
            try
            {
                richTextBox1.Text = myclient.HelloWorld();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        private void button4_Click(object sender, EventArgs e)
        {
            try
            {
                /* 第二种方式可以传参,返回实体(不能传入一个对象实体,但是配置动态灵活) */
                string url = "http://localhost:3199/ServicePort/Service.asmx";
                string methodname = "getCustomerFromParams";

                object[] obj = new object[3];
                obj[0] = int.Parse(textBox1.Text);
                obj[1] = textBox2.Text;
                obj[2] = textBox3.Text;
                string str = JsonHelper.Jso_ToJSON(WebServiceHelper.InvokeWebService(url, methodname, obj));
                richTextBox1.Text = str;
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        private void button5_Click(object sender, EventArgs e)
        {
            try
            {
                /* 第三种方式可以传参、传实体,返回XmlDom(配置动态灵活,响应处理麻烦了点而已) */
                string url = "http://localhost:3199/ServicePort/Service.asmx";
                string methodname = "getCustomer";
                Hashtable parm = new Hashtable();
                string objectName = "cus1";
                parm["cus_id"] = int.Parse(textBox1.Text);
                parm["cus_name"] = textBox2.Text;
                parm["cus_address"] = textBox3.Text;
                XmlDocument oo = WebServiceXmlHelper.QuerySoapWebServiceByObject(url, methodname, objectName, parm);
                richTextBox1.Text = oo.InnerXml;
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

 

XML,运维效果

服务端

 XML 6

 XML 7

WSDL

 XML 8

客户端(援救多平台,如服务器的Webservice用Java、.Net等)

第①种方法:传参、传实体,USportageL配置不够灵活,数据处理灵活

 XML 9

第壹种方法:传参,无法传实体,UCR-VL配置灵活, 数据处理要稍微加工

 XML 10

第一种办法:传参、传实体、UTiggoL配置灵活,数据处理要多少加工

 XML 11

小结

  • 一经只传递参数,能够用HTTP来传递,Webservice提供的接口如下

HTTP POST

以下是 HTTP POST 请求和响应示例。所浮现的占位符需替换为实际值。

POST /ServicePort/Service.asmx/getCustomerFromParams HTTP/1.1
Host: localhost
Content-Type: application/x-www-form-urlencoded
Content-Length: length

id=string&name=string&address=string

 

重返接收串

HTTP/1.1 200 OK
Content-Type: text/xml; charset=utf-8
Content-Length: length
<?xml version="1.0" encoding="utf-8"?>
<Customer xmlns="http://tempuri.org/">
  <cus_id>int</cus_id>
  <cus_name>string</cus_name>
  <cus_address>string</cus_address>
</Customer>

 

 

  • 假定是传递实体或传递参数,也足以行使SOAP来传递,Webservice提供的接口如下

    POST /ServicePort/Service.asmx HTTP/1.1
    Host: localhost
    Content-Type: application/soap+xml; charset=utf-8
    Content-Length: length


    http://www.w3.org/2001/XMLSchema-instance” xmlns:xsd=”http://www.w3.org/2001/XMLSchema” xmlns:soap12=”http://www.w3.org/2003/05/soap-envelope">
    soap12:Body

    <getCustomerFromParams xmlns="http://tempuri.org/">
      <id>int</id>
      <name>string</name>
      <address>string</address>
    </getCustomerFromParams>
    

    /soap12:Body
    /soap12:Envelope

 

 

回来接收串:

HTTP/1.1 200 OK
Content-Type: application/soap+xml; charset=utf-8
Content-Length: length

<?xml version="1.0" encoding="utf-8"?>
<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">
  <soap12:Body>
    <getCustomerFromParamsResponse xmlns="http://tempuri.org/">
      <getCustomerFromParamsResult>
        <cus_id>int</cus_id>
        <cus_name>string</cus_name>
        <cus_address>string</cus_address>
      </getCustomerFromParamsResult>
    </getCustomerFromParamsResponse>
  </soap12:Body>
</soap12:Envelope>

 

 WebService向外发表接口的效应,可以更好的为其余平台提供数据以及现实信息平台全部。

Word文档下载:浅淡Webservice、WSDL二种服务走访的格局.doc

源代码下载:http://files.cnblogs.com/yongfeng/001DotNetWebService.rar

参考网站:http://www.w3.org/TR/wsdl

 

 

相关文章

网站地图xml地图