一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

Webservice、WSDL三種服務(wù)訪問的方式

 gljin_cn 2015-07-27

Webservice

Webservice是使應(yīng)用程序以與平臺(tái)和編程語言無關(guān)的方式進(jìn)行相互通信技術(shù)。

eg:站點(diǎn)提供訪問的數(shù)據(jù)接口:新浪微博、淘寶。

官方解釋:它是一種構(gòu)建應(yīng)用程序的普遍模型,可以在任何支持網(wǎng)絡(luò)通信的操作系統(tǒng)中實(shí)施運(yùn)行;它是一種新的web應(yīng)用程序分支,是自包含、自描述、模塊化的應(yīng)用,可以發(fā)布、定位、通過web調(diào)用。WebService是一個(gè)應(yīng)用組件,它邏輯性的為其他應(yīng)用程序提供數(shù)據(jù)與服務(wù).各應(yīng)用程序通過網(wǎng)絡(luò)協(xié)議和規(guī)定的一些標(biāo)準(zhǔn)數(shù)據(jù)格式(Http,XML,Soap)來訪問WebService,通過WebService內(nèi)部執(zhí)行得到所需結(jié)果.Web Service可以執(zhí)行從簡單的請求到復(fù)雜商務(wù)處理的任何功能。一旦部署以后,其他WebService應(yīng)用程序可以發(fā)現(xiàn)并調(diào)用它部署的服務(wù)。

 

SOAP(Simple Object Access Protocol):簡單對象訪問協(xié)議是在分散或分布式的環(huán)境中交換信息并執(zhí)行遠(yuǎn)程過程調(diào)用的輕量級(jí)協(xié)議,是一個(gè)基于XML的協(xié)議。使用SOAP,不用考慮任何特定的傳輸協(xié)議(最常用的還是HTTP協(xié)議),可以允許任何類型的對象或代碼,在任何平臺(tái)上,以任何一種語言相互通信。

WSDL:Web Services Description Language的縮寫,是一個(gè)用來描述Web服務(wù)和說明如何與Web服務(wù)通信的XML語言。為用戶提供詳細(xì)的接口說明書。

Axis:Axis本質(zhì)上就是一個(gè)SOAP引擎(Apache Axis is an implementation of the SAOP),提供創(chuàng)建服務(wù)名、客戶端和網(wǎng)關(guān)SOAP操作的基本框架。但是Axis并不完全是一個(gè)SOAP引擎,它還包括:

  • 是一個(gè)獨(dú)立的SOAP服務(wù)器。
  • 是一個(gè)嵌入Servlet引擎(eg:Tomcat)的服務(wù)器。
  • 支持WSDL。
  • 提供轉(zhuǎn)化WSDL為Java類的工具。
  • 提供例子程序。
  • 提供TCP/IP數(shù)據(jù)包監(jiān)視工具。

Axis有四種Service styles,分別是:

  • RPC(Remote Procedure Call Protocol遠(yuǎn)程訪問調(diào)用協(xié)議,部署時(shí)屬于默認(rèn)選項(xiàng))
  • Document
  • Wrapped
  • Message

WSDD(Web Service Deployment Descriptor):Web服務(wù)分布描述,它定義了Web服務(wù)的接口,如服務(wù)名、提供的方法、方法的參數(shù)信息。

UDDI(Universal Description,Discovery,and Integration):統(tǒng)一描述、發(fā)現(xiàn)和集成,用于集中存放和查找WSDL描述文件,起著目錄服務(wù)器的作用。

 

 

WSDL元素

WSDL元素基于XML語法描述了與服務(wù)進(jìn)行交互的基本元素:

Type(消息類型):數(shù)據(jù)類型定義的容器,它使用某種類型系統(tǒng)(如XSD)。

Message(消息):通信數(shù)據(jù)的抽象類型化定義,它由一個(gè)或者多個(gè)part組成。

Part:消息參數(shù)

Operation(操作):對服務(wù)所支持的操作進(jìn)行抽象描述,WSDL定義了四種操作:

  • 單向(one-way):端點(diǎn)接受信息;
  • 請求-響應(yīng)(request-response):端點(diǎn)接受消息,然后發(fā)送相關(guān)消息;
  • 要求-響應(yīng)(solicit-response):端點(diǎn)發(fā)送消息,然后接受相關(guān)消息;
  • 通知(notification):端點(diǎn)發(fā)送消息。

Port Type (端口類型):特定端口類型的具體協(xié)議和數(shù)據(jù)格式規(guī)范。

Binding:特定端口類型的具體協(xié)議和數(shù)據(jù)格式規(guī)范

Port :定義為綁定和網(wǎng)絡(luò)地址組合的單個(gè)端點(diǎn)。

Service:相關(guān)端口的集合,包括其關(guān)聯(lián)的接口、操作、消息等。

 

以上類圖表達(dá)了Service、Port、Binding、Operation、Message之間的依賴、關(guān)聯(lián)、聚合、合成、泛化、實(shí)現(xiàn),這里暫不多說,若感興趣,請參考該文章

UML類圖關(guān)系大全: http://www.cnblogs.com/riky/archive/2007/04/07/704298.html

WSDL偽代碼

WSDL 文檔是利用這些主要的元素來描述某個(gè) web service 的:

元素 定義

web service 執(zhí)行的操作

<message> web service 使用的消息
<types> web service 使用的數(shù)據(jù)類型
<binding> web service 使用的通信協(xié)議
一個(gè) WSDL 文檔的主要結(jié)構(gòu)是類似這樣的:
<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 元素,以及一個(gè) service 元素,此元素可把若干個(gè) web services 的定義組合在一個(gè)單一的 WSDL 文檔中

實(shí)踐

為了形成鮮明的對比,客戶端用CS架構(gòu)來創(chuàng)建客戶端。

實(shí)踐之一:創(chuàng)建服務(wù)端

創(chuàng)建ASP.NET Web服務(wù)

 

代碼示例

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:///")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
// 若要允許使用 ASP.NET AJAX 從腳本中調(diào)用此 Web 服務(wù),請取消對下行的注釋。
// [System.Web.Script.Services.ScriptService]
public class Service : System.Web.Services.WebService
{
    public Service () {
        //如果使用設(shè)計(jì)的組件,請取消注釋以下行
        //InitializeComponent();

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

    [WebMethod(Description="獲取用戶信息",MessageName="getCustomer")]
    public Customer getCustomer(Customer cus1)
    {
        return cus1;
    }
 
    [WebMethod(Description = "獲取用戶信息以參數(shù)形式", 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;
    }
   
}

 

實(shí)踐之二:創(chuàng)建客戶端

創(chuàng)建ASP.NET WEB客戶端(以CS架構(gòu))

 

代碼示例

 (其中一種方式通過創(chuàng)建“服務(wù)引用”的方式,輸入“http://localhost: 端口號(hào)/XX.asmx?wsdl”方式,獲得服務(wù)訪問接口)

private ServiceReference1.ServiceSoapClient myclient = new ServiceReference1.ServiceSoapClient();
 
        private void button1_Click(object sender, EventArgs e)
        {
            try
            {
                /* 第一種方式可以傳參、傳實(shí)體,返回實(shí)體 */
                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
            {
                /* 第二種方式可以傳參,返回實(shí)體(不能傳入一個(gè)對象實(shí)體,但是配置動(dòng)態(tài)靈活) */
                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
            {
                /* 第三種方式可以傳參、傳實(shí)體,返回XmlDom(配置動(dòng)態(tài)靈活,響應(yīng)處理麻煩了點(diǎn)而已) */
                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);
            }
        }

 

運(yùn)行效果

服務(wù)端

 

 

WSDL

 

客戶端(支持多平臺(tái),如Java、.Net等)

第1種方式:傳參、傳實(shí)體,URL配置缺少靈活,數(shù)據(jù)處理靈活

 

第2種方式:傳參,不能傳實(shí)體,URL配置靈活, 數(shù)據(jù)處理要稍微加工

 

第3種方式:傳參、傳實(shí)體、URL配置靈活,數(shù)據(jù)處理要稍微加工

 

小結(jié)

  • 如果只傳遞參數(shù),可以用HTTP來傳遞,Webservice提供的接口如下

HTTP POST

以下是 HTTP POST 請求和響應(yīng)示例。所顯示的占位符需替換為實(shí)際值。

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:///">
  <cus_id>int</cus_id>
  <cus_name>string</cus_name>
  <cus_address>string</cus_address>
</Customer>

 

 

  • 如果是傳遞實(shí)體或傳遞參數(shù),也可以使用SOAP來傳遞,Webservice提供的接口如下
POST /ServicePort/Service.asmx HTTP/1.1
Host: localhost
Content-Type: application/soap+xml; charset=utf-8
Content-Length: length
 
<?xml version="1.0" encoding="utf-8"?>
<soap12:Envelope xmlns:xsi="http://www./2001/XMLSchema-instance" xmlns:xsd="http://www./2001/XMLSchema" xmlns:soap12="http://www./2003/05/soap-envelope">
  <soap12:Body>
    <getCustomerFromParams xmlns="http:///">
      <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./2001/XMLSchema-instance" xmlns:xsd="http://www./2001/XMLSchema" xmlns:soap12="http://www./2003/05/soap-envelope">
  <soap12:Body>
    <getCustomerFromParamsResponse xmlns="http:///">
      <getCustomerFromParamsResult>
        <cus_id>int</cus_id>
        <cus_name>string</cus_name>
        <cus_address>string</cus_address>
      </getCustomerFromParamsResult>
    </getCustomerFromParamsResponse>
  </soap12:Body>
</soap12:Envelope>

 

 WebService向外發(fā)布接口的功能,能夠更好的為其它平臺(tái)提供數(shù)據(jù)以及現(xiàn)實(shí)信息平臺(tái)一體化。

本文下載: 淺淡Webservice、WSDL三種服務(wù)訪問的方式.doc

源代碼下載: http://files.cnblogs.com/yongfeng/001DotNetWebService.rar

參考網(wǎng)站: http://www./TR/wsdl

 

 

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請遵守用戶 評(píng)論公約

    類似文章 更多

    大伊香蕉一区二区三区| 亚洲男人的天堂久久a| 国产传媒一区二区三区| 日本人妻精品有码字幕| 亚洲综合日韩精品欧美综合区| 日韩一区二区三区有码| 国产精品免费无遮挡不卡视频| 欧美精品亚洲精品日韩精品| 男人大臿蕉香蕉大视频| 国产中文另类天堂二区| 免费福利午夜在线观看| 亚洲人妻av中文字幕| 天堂网中文字幕在线观看| 国产精品色热综合在线| 激情三级在线观看视频| 亚洲五月婷婷中文字幕| 国产91人妻精品一区二区三区 | 亚洲国产av在线观看一区| 免费观看潮喷到高潮大叫| 国产激情国产精品久久源| 国产又粗又硬又大又爽的视频| 亚洲在线观看福利视频| 高清欧美大片免费在线观看| 中文字幕有码视频熟女| 天海翼高清二区三区在线| 婷婷开心五月亚洲综合| 欧美一级不卡视频在线观看| 成人日韩视频中文字幕| 又黄又色又爽又免费的视频| 福利新区一区二区人口| 草草草草在线观看视频| 蜜臀人妻一区二区三区| 国产一级二级三级观看| 日本午夜福利视频免费观看| 亚洲乱妇熟女爽的高潮片| 国产精品视频久久一区| 国产av一区二区三区麻豆| 亚洲国产一区精品一区二区三区色| 国产熟女一区二区不卡| 丝袜美女诱惑在线观看| 偷拍偷窥女厕一区二区视频|