對于SOAP協議的全面介紹
學習了一段時間的網絡協議,相信大家已經對一些常規的網絡協議有所了解了。那么這里我們主要介紹一下SOAP協議的內容。SOAP協議:簡單對象訪問協議(SOAP:Simple Object Access Protocol),簡單對象訪問協議(SOAP)是一種輕量的、簡單的、基于 XML 的協議,它被設計成在 WEB 上交換結構化的和固化的信息. SOAP協議可以和現存的許多因特網協議和格式結合使用,包括超文本傳輸協議( HTTP),簡單郵件傳輸協議(SMTP),多用途網際郵件擴充協議(MIME).它還支持從消息系統到遠程過程調用(RPC)等大量的應用程序.
SOAP 包括三個部分:
SOAP 封裝:它定義了一個框架 , 該框架描述了消息中的內容是什么,誰應當處理它以及它是可選的還是必須的.
SOAP 編碼規則:它定義了一種序列化的機制,用于交換應用程序所定義的數據類型的實例.
SOAP RPC 表示:它定義了用于表示遠程過程調用和應答的協定.(RPC:英文原義:Remote Procedure Call Protocol
中文釋義:(RFC-1831)遠程過程調用協議)
SOAP 消息基本上是從發送端到接收端的單向傳輸,但它們常常結合起來執行類似于請求 / 應答的模式.所有的 SOAP 消息都使用 XML 編碼.一條 SOAP 消息就是一個包含有一個必需的 SOAP 的封裝包,一個可選的 SOAP 標頭和一個必需的 SOAP 體塊的 XML 文檔.把 SOAP 綁定到 HTTP 提供了同時利用 SOAP 的樣式和分散的靈活性的特點以及 HTTP 的豐富的特征庫的優點.在 HTTP 上傳送 SOAP 并不是說 SOAP 會覆蓋現有的 HTTP 語義,而是 HTTP 上的 SOAP 語義會自然的映射到 HTTP 語義.在使用 HTTP 作為協議綁定的場合中, RPC 請求映射到 HTTP 請求上,而 RPC 應答映射到 HTTP 應答.然而,在 RPC 上使用 SOAP 并不僅限于 HTTP 協議綁定.
SOAP也可以綁定到TCP和UDP協議上.
協議結構
SOAP協議消息格式:
SOAP 標頭
- <SOAP-ENV: Envelope
- Attributes>
- <SOAP-ENV:Body
- Attributes
- </SOAP-ENV:Body>
- </SOAP-ENV:Envelope>
目前主要在web服務中運用.
SOAP Action WEB編碼中常見,協議開始起始意思,常見于編碼啟始句.
語法規則
這里是一些重要的語法規則:
SOAP 消息必須用 XML 來編碼
SOAP 消息必須使用 SOAP Envelope 命名空間
SOAP 消息必須使用 SOAP Encoding 命名空間
SOAP 消息不能包含 DTD 引用
SOAP 消息不能包含 XML 處理指令
SOAP 消息的基本結構
- <?xml version="1.0"?>
- <soap:Envelope
- xmlns:soap="http://www.w3.org/2001/12/soap-envelope"
- soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">
- <soap:Header>
- ...
- ...
- </soap:Header>
- <soap:Body>
- ...
- ...
- <soap:Fault>
- ...
- ...
- </soap:Fault>
- </soap:Body>
- </soap:Envelope>
現在采用webservice+soap的比較火,原因:
WebService可用基于XML的SOAP來表示數據和調用請求,并且通過HTTP協議來傳輸這些XML格式的數據,因為此時的調用請求和回應消息是可以穿過防火墻的,一般來說都只有80端口是開放的.具資料顯示在WebService之前實現的一些所謂的分布式組件技術是采用二進制來表示的,還需要通過特殊的端口來通信.明顯當遇到防火墻時就會失敗.webservice***優點就是實現異構平臺間的互通.這也是使用WebService的主要原因之一.這樣任何兩個應用程序,只要他們能讀寫XML,就能相互通信.
1.webservice部署比較方便(它直接通過網絡引用,只要服務器端拋出的接口不變,客戶端是沒法知道的,因為所以的內部計算都是在服務器運行的)DLL,部署,更新需要每個應用了這個DLL的應用程序都作相應的引用更新...而如果用了Ws,則不用,因為它通過網絡部署,通過網絡引用,基本上,ws發生了變化,客戶端沒有影響,甚至不知道有這樣的變化...
2.web service的編寫,跟普通的class差不多.
3.當然還有一個好處:平臺無關.C#,Java寫的ws可以相互調用.
4.做分布式系統.比如 說把數據訪問部分寫成ws,發布在另外一臺server上... ...
Webservice與WCF的區別:
webservice 集成了 WEBservice,.NET Remoting,enterprise Service,WSE,MSMQ等技術的整合。WCF具有WEBservice的優點和彌補了他的缺點.但是為了加強WEB service 的安全性的規范性,微軟使用WCF來綁定一些規范,讓VS生成代碼更加迅速準確.比如 <Head>的協議節點的生成,加密,(這塊內容還有很多,但是我只接觸到這兩點),在VS2008中,WCF就是通過接口來實現服務的.和VS2005下實現WEB SerVCie有點不一樣.微軟有意將WCF做稱一個強大的解決方案整合.特別是它的強大的配置性. .