1. 程式人生 > >webservice快速入門-SOAP和WSDL(三)

webservice快速入門-SOAP和WSDL(三)

什麼是SOAP?SOAP:Simple Object Access Protocol

以下是百度的結果:

SOAP:簡單物件訪問協議,簡單物件訪問協議(SOAP)是一種輕量的、簡單的、基於 XML 的協議,它被設計成在 WEB 上交換結構化的和固化的資訊。 SOAP 可以和現存的許多因特網協議和格式結合使用,包括超文字傳輸協議( HTTP),簡單郵件傳輸協議(SMTP),多用途網際郵件擴充協議(MIME)。它還支援從訊息系統到遠端過程呼叫(RPC)等大量的應用程式

說白了,它就是一種基於XML傳輸資料的協議,為什麼基於XML,因為這樣可以確保不同平臺,語言的通訊,也就是經常聽到的導構平臺之前的通訊。

我們常見的json,xml其實都可以理解為是soap的實現

我們來看一下之前的WSDL檔案,訪問:http://localhost:7777/tudou?wsdl如下:

This XML file does not appear to have any style information associated with it. The document tree is shown below.
<!--
 Published by JAX-WS RI at http://jax-ws.dev.java.net. RI's version is JAX-WS RI 2.1.6 in JDK 6. 
-->
<!--
 Generated by JAX-WS RI at http://jax-ws.dev.java.net. RI's version is JAX-WS RI 2.1.6 in JDK 6. 
-->
<definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://server.ws.platform.whaty.com/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://schemas.xmlsoap.org/wsdl/" targetNamespace="http://server.ws.platform.whaty.com/" name="MyServiceImplService">
<types>
<xsd:schema>
<xsd:import namespace="http://server.ws.platform.whaty.com/" schemaLocation="http://localhost:7777/tudou?xsd=1"/>
</xsd:schema>
</types>
<message name="minus">
<part name="parameters" element="tns:minus"/>
</message>
<message name="minusResponse">
<part name="parameters" element="tns:minusResponse"/>
</message>
<message name="add">
<part name="parameters" element="tns:add"/>
</message>
<message name="addResponse">
<part name="parameters" element="tns:addResponse"/>
</message>
<portType name="IMyservice">
<operation name="minus">
<input message="tns:minus"/>
<output message="tns:minusResponse"/>
</operation>
<operation name="add">
<input message="tns:add"/>
<output message="tns:addResponse"/>
</operation>
</portType>
<binding name="MyServiceImplPortBinding" type="tns:IMyservice">
<soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/>
<operation name="minus">
<soap:operation soapAction=""/>
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
</operation>
<operation name="add">
<soap:operation soapAction=""/>
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
</operation>
</binding>
<service name="MyServiceImplService">
<port name="MyServiceImplPort" binding="tns:MyServiceImplPortBinding">
<soap:address location="http://localhost:7777/tudou"/>
</port>
</service>
</definitions>

我們把節點收起來看得更清楚點:


很清楚的看到這個wsdl分為type,message,porttype,binding,service這5部分。

type:用來定義訪問的型別,一個型別對應我們服務端介面的一個方法,一個型別對應我們介面的一個返回值。我們可以看到上面的wsdl中有一個schemaLocation="http://localhost:7777/tudou?xsd=1"的玩意,我們直接在瀏覽器訪問一下它。

This XML file does not appear to have any style information associated with it. The document tree is shown below.
<!--
 Published by JAX-WS RI at http://jax-ws.dev.java.net. RI's version is JAX-WS RI 2.1.6 in JDK 6. 
-->
<xs:schema xmlns:tns="http://server.ws.platform.whaty.com/" xmlns:xs="http://www.w3.org/2001/XMLSchema" version="1.0" targetNamespace="http://server.ws.platform.whaty.com/">
<xs:element name="add" type="tns:add"/>
<xs:element name="addResponse" type="tns:addResponse"/>
<xs:element name="minus" type="tns:minus"/>
<xs:element name="minusResponse" type="tns:minusResponse"/>
<xs:complexType name="add">
<xs:sequence>
<xs:element name="arg0" type="xs:int"/>
<xs:element name="arg1" type="xs:int"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="addResponse">
<xs:sequence>
<xs:element name="return" type="xs:int"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="minus">
<xs:sequence>
<xs:element name="arg0" type="xs:int"/>
<xs:element name="arg1" type="xs:int"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="minusResponse">
<xs:sequence>
<xs:element name="return" type="xs:int"/>
</xs:sequence>
</xs:complexType>
</xs:schema>
看到complexType了沒有。如果你學了schema和dtd,你就應該知道這實際就是一種型別,下面是相應的子節點,可能還有一些約束。

message:SOAP,也就是被封裝成一個物件的形式,實際上是以XML的形式展現的。裡面就是傳遞的我們的資料。

portType:就是對應我們的操作了。可以看到operation這個單詞吧。

binding:指定訊息所使用的格式。Literal就是不在SOAP訊息中表明資料型別,而通過其它方式獲知資料型別,這種方式是開發包相關的,沒有什麼標準;如<x>50</x>,單從SOAP訊息,你無法判斷50是數字還是字串。詳見:

http://blog.csdn.net/jackyrongvip/article/details/4608014

而它裡面的style="Document"中Document就是將SOAP請求和響應,或者說輸入輸出定義為XML元素,有嚴格的Schema("document" style means the messages in and out of the service are exactly as they are describe by the XML Schema in the WSDL).

service:指定服務釋出的名稱。

相關推薦

webservice快速入門-SOAPWSDL

什麼是SOAP?SOAP:Simple Object Access Protocol 以下是百度的結果: SOAP:簡單物件訪問協議,簡單物件訪問協議(SOAP)是一種輕量的、簡單的、基於 XML 的協議,它被設計成在 WEB 上交換結構化的和固化的資訊。 SOAP 可以

SciKit-learn快速入門教程例項

一,sklearn的常用屬性和功能 繼續上次對波士頓房價預測的討論,瞭解模型的屬性和功能。 #首先匯入庫,使用的是線性迴歸 from sklearn import datasets from sklearn.linear_model import LinearRegr

Scikit-learn快速入門教程例項

一,什麼是SKlearn SciKit learn的簡稱是SKlearn,是一個python庫,專門用於機器學習的模組。 以下是它的官方網站,文件等資源都可以在裡面找到http://scikit-learn.org/stable/#。

Redis入門到高可用—— API理解使用

入門到 16px ron 節點 理解 高可用 怎麽 生產 sca 一、通用命令 查看所有key 127.0.0.1:6379> keys * keys命令一般不在生產環境使用! keys命令怎麽用? ①熱備從節點(從節點一般不在生產環境使用,可以在從節點上執

vuex 基本入門使用-關於 mutation

vuex 基本入門和使用(三)-關於 mutation vuex 版本為 ^2.3.1,按照我自己的理解來整理vuex。 關於 mutation 這裡應該很好理解。 更改 Vuex 的 store 中的狀態的唯一方法是提交 mutation。Vuex 中的 mutation 非常類似於事

postgresql從入門到菜鳥基本命令視窗函式

上一篇我們已經在rhel上建立了資料庫,並且建立的一張成績表。之後通過通過客戶端連線上伺服器端。 這一篇將會寫一些關於資料庫的操作,首先是一些基本的操作的操作如選擇資料庫,查看錶等等。 連線至伺服器端後可以通過以下命令檢視資料庫的基本資訊 \l:檢視所有資料庫。 \c:選擇資料庫

CPF 入門教程 - 樣式動畫

CPF NetCore跨平臺UI框架   系列教程 CPF 入門教程(一) CPF 入門教程 - 資料繫結和命令繫結(二) CPF 入門教程 - 樣式和動畫(三)   用樣式可以對內部元素進行批量設定屬性。 CPF裡採用CSS作為樣式描述。為什麼用css描述樣式?因為css結構簡單明瞭。

SVN服務器搭建使用

進行 文本框 logs 版本 強制寫 移動 對話 刪除文件 對話框 接下來,試試用TortoiseSVN修改文件,添加文件,刪除文件,以及如何解決沖突等. 添加文件 在檢出的工作副本中添加一個Readme.txt文本文件,這時候這個文本文件會顯示為沒有版本控制的狀態,如圖

hadoop入門筆記MapReduce簡介

today 信息 編程模型 cut 大型 狀態 參數 dfs 好處 . MapReduce基本編程模型和框架 1.1 MapReduce抽象模型 大數據計算的核心思想是:分而治之。如下圖1所示。把大量的數據劃分開來,分配給各個子任務來完成。再將結果合並到一起輸出。 註:如果

Mysql查詢優化從入門到跑路查詢的基本操作

限制 sql 數據 單位 二維 一行 用戶 div 答案 查詢的基本操作 1.選擇操作 對應的是限制條件,操作對象是二維表的行。 優化方式:選擇操作下推 目的:盡量減少連接操作前的元租數,使得中間臨時關系盡量少(元祖數少,連接得到的元組數就少) 好處

多線程編程學習筆記——asyncawait

result ask aps nta cti ise 線程編程 學習筆記 top 接上文 多線程編程學習筆記——async和await(一) 接上文 多線程編程學習筆記——async和await(二) 五、 處理異步操

Spring Data Redis入門示例:基於RedisTemplate

gem per 例子 基於 接口 image 安全 redist 工作 使用底層API:RedisConnection操作Redis,需要對數據進行手動轉換(String <---->byte),需要進行多數重復性工作,效率低下;org.springframew

Docker入門與應用系列容器管理

輸出 clear tag 程序 ipaddr one 停止 1.2 標準 一、啟動容器   啟動容器有兩種方式,一種是基於鏡像新建一個容器並啟動,另一個是將終止狀態的容器重新啟動。 1.1 新建並啟動 主要命令為 docker run 下面的命令輸出一個&rd

Saltstack數據系統GrainsPillar

centos服務器 items har zabb ini highstate fqdn clas deb Saltstack數據系統 分為Grains和Pillar SaltStack 數據系統 Grains (谷粒) Pillar (柱子)

零基礎快速入門SpringBoot2.0 教程

新版本 exec list string classes 控制器 project mat 生命 一、SpringBoot2.x使用Dev-tool熱部署簡介:介紹什麽是熱部署,使用springboot結合dev-tool工具,快速加載啟動應用 官方地址:https://do

HTML常用元素屬性

表頭 cell -type separate caption 寬度 ava 測試表 ont 7:表格相關元素 <table>定表格,可用屬性cellpedding:單元格和內容之間的間距;cellspacing:單元格之間的間距;width:表格的寬度 <

零基礎快速入門SpringBoot2.0教程

trace ssh ket files frame ali serialize fis 系統服務 一、JMS介紹和使用場景及基礎編程模型簡介:講解什麽是小寫隊列,JMS的基礎知識和使用場景 1、什麽是JMS: Java消息服務(Java Message Service),J

Android實戰——第三方服務之Bmob後端雲的推送服務的集成使用

第一篇 文章 href 第三方服務 log 集成 android實戰 https 分享 第三方服務之Bmob後端雲的推送服務的集成和使用(三) 事先說明:這裏的一切操作都是在集成了BmobSDK之後實現的,如果對Bmob還不了解的話,請關註我第一篇Bmob文章 步驟

詳解C#特性反射

typeinfo ref 都是 system.in 全局 color com 依然 程序   類型信息(Type Information)用來表示類型聲明的信息,通過抽象基類System.Type的實例存儲這些信息,當使用反射時,CLR獲取指定類型的Type對象,通過這個對

SpringCloud從入門到進階——路由接入Zuul

comm aml header main text nco 整合 utf8 json 內容   SpringBoot整合SpringCloud的Eureka、Zuul等組件,快速實現簡單易懂且具有服務熔斷、負載均衡的分布式架構1.0,體驗微服務的魅力。 版本   IDE:I