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>
我們把節點收起來看得更清楚點:
type:用來定義訪問的型別,一個型別對應我們服務端介面的一個方法,一個型別對應我們介面的一個返回值。我們可以看到上面的wsdl中有一個schemaLocation="http://localhost:7777/tudou?xsd=1"的玩意,我們直接在瀏覽器訪問一下它。
看到complexType了沒有。如果你學了schema和dtd,你就應該知道這實際就是一種型別,下面是相應的子節點,可能還有一些約束。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>
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快速入門-SOAP和WSDL(三)
什麼是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.選擇操作 對應的是限制條件,操作對象是二維表的行。 優化方式:選擇操作下推 目的:盡量減少連接操作前的元租數,使得中間臨時關系盡量少(元祖數少,連接得到的元組數就少) 好處
多線程編程學習筆記——async和await(三)
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數據系統Grains和Pillar(三)
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