Webservice

Webservice是使应用程序以同平台和编程语言无关之措施进行相互通信技术。

eg:站点提供访问的数码接口:新浪微博、淘宝。

官说明:它是千篇一律栽构建应用程序的大规模模型,可以于另支持网络通信的操作系统被实施运行;它是同种新的web应用程序分支,是打包含、自描述、模块化的施用,可以发布、定位、通过web调用。WebService是一个采用组件,它逻辑性的呢任何应用程序提供数据与服务.各应用程序通过网络协议和规定的局部规范数据格式(Http,XML,Soap)来拜会WebService,通过WebService内部尽得所用结果.Web
Service可以履打简单的求到复杂商务处理的别力量。一旦部署下,其他WebService应用程序可以发现并调用它部署的服务。

 XML 1

SOAP(Simple Object Access
Protocol):简单对象看协议是在疏散或分布式的条件遭到交换信息并实行远程过程调用的轻量级协议,是一个根据XML的合计。使用SOAP,不用考虑其他特定的导协议(最常用之或者HTTP协议),可以允许任何项目的目标或代码,在其余平台达成,以任何一样种语言相互通信。

WSDL:Web Services Description
Language的缩写,是一个所以来描述Web服务以及验证如何和Web服务通信的XML语言。为用户提供详实的接口说明书。

Axis:Axis本质上就是是一个SOAP引擎(Apache Axis is an implementation of
the
SAOP),提供创建服务名、客户端以及网关SOAP操作的核心框架。但是Axis并无了是一个SOAP引擎,它还连:

  • 凡一个单身的SOAP服务器。
  • 大凡一个措Servlet引擎(eg:Tomcat)的服务器。
  • 支持WSDL。
  • 提供转账WSDL为Java类的家伙。
  • 供例子程序。
  • 供TCP/IP数据包监视工具。

Axis有四种Service styles,分别是:

  • RPC(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 6

 XML 7

WSDL

 XML 8

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

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

 XML 9

第2栽方法:传参,不能够传实体,URL配置灵活, 数据处理要有些加工

 XML 10

第3种植办法XML:传参、传实体、URL配置灵活,数据处理要聊加工

 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


    /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地图