soap服務
1. webservice調用方式http和soap的區別
Web service一般就是用協議通過HTTP來調用它,其實他就是一個WSDL文檔,客戶都可以閱讀WSDL文檔來用這個Web service。客戶根據WSDL描述文檔,會生成一個SOAP請求消息。Web service都是放在Web服務器 (如IIS) 後面的,客戶生成的SOAP請求會被嵌入在一個HTTP POST請求中,發送到Web伺服器來。Web伺服器再把這些請求轉發給Web service請求處理器。請求處理器的作用在於,解析收到的SOAP請求,調用Web service,然後再生成相應的SOAP應答。Web伺服器得到SOAP應答後,會再通過HTTP應答的方式把它送回到客戶端。
個人以為就把webservice當成是Http這種請求和響應方式就可以處理大部分問題了。
SOAP 使用 HTTP 傳送 XML,盡管HTTP 不是有效率的通訊協議,而且 XML 還需要額外的文件解析(parse),兩者使得交易的速度大大低於其它方案。但是XML 是一個開放、健全、有語義的訊息機制,而 HTTP 是一個廣泛又能避免許多關於防火牆的問題,從而使SOAP得到了廣泛的應用。但是如果效率對你來說很重要,那麼你應該多考慮其它的方式,而不要用 SOAP。
為了更好的理解SOAP,HTTP,XML如何工作的,不妨先考慮一下COM/DCOM的運行機制,DCOM處理網路協議的低層次的細節問題,如PROXY/STUB間的通訊,生命周期的管理,對象的標識。在客戶端與伺服器端進行交互的時候,DCOM採用NDR(Network Data Representation)作為數據表示,它是低層次的與平台無關的數據表現形式。
2. 如何寫一個簡單soap webservice實例
本Guide利用Eclipse以及Ant建立一個簡單的Web Service,以演示 Service的基本開發過程:
1.系統條件:
Eclipse Java EE IDE for Web Developers
Java SE 6
Windows XP
2.基本環境搭建:
1)Java SE6 JDK的安裝:下載Java SE6 JDK,雙擊,安裝默認選項進行安裝即可。
2)Eclipse的安裝與配置:
安裝時直接解壓。
配置處有兩點,Window>Preferences>Java>Installed JREs確保如下設置:
安裝路徑可能略有不同。
Window>Preferences>Java>Compiler 確保如下設置:
3.建立Server端工程和相關包與類:
創建一個Java Project,命名為wsServerHelloWorld:
在這個項目下建立包:org.gnuhpc.wsServer
在這個包下邊建立類:SayHello
在SayHello.java文件中輸入以下代碼:
package org.gnuhpc.wsServer;
import javax.jws.WebService;
@WebService
public class SayHello {
private static final String SALUTATION = "Hello";
public String getGreeting(String name) {
return SALUTATION + " " + name;
}
}
其中注意到@WebService ,這個稱作annotation或者metadata,Java SE 5中的Web Services Metadata Specification引入的。Java SE 6中對於Web Services規范的升級以及JAX-WS(Java API for XML Web Services)2.0規范,這些升級使得我們Web Services的創建和調用變得更加容易。使用這些新功能,我們可以僅僅使用簡單的Annotations注釋從一個Java類創建Web Services。開發者將其類和方法之前用該annotations指定,類告訴runtime engine以Web Service的方式和操作來使能該類和方法。這個annotations可以產生一個可布署的Web Service,是一個WSDL映射annotations,將Java源代碼與代表Web Service的WSDL元素連接在了一起。
4.使用Ant產生Server端代碼:
首先在項目中新建一個文件:build.xml,然後使用OpenWith>AntEditor打開,輸入以下腳本代碼:
<project default="wsgen">
<target name="wsgen">
<exec executable="wsgen">
<arg line="-cp ./bin -keep -s ./src -d ./bin
org.gnuhpc.wsServer.SayHello"/>
</exec>
</target>
</project>
default指定了默認執行的Target為wsgen,wsgen可以創建一個能夠使用WebService的類,它生成所有用於WebService發布的源代碼文件和經過編譯過的二進制類文件。它還生成WSDL和符合規范的該類的WebService。
Target名稱為wsgen,具體執行的命令的參數:
-cp 為類路徑
-keep後產生的java文件
-s 產生的源文件放在哪
-d 產生的輸出問價放在哪
然後使用Ant Build選項運行:
在成功執行的提示後,我們刷新一下Project
我們在Project區域可以看到,結果如下:
5.分布Web Service
org.gnuhpc.wsServer下建立一個類RunService:
package org.gnuhpc.wsServer;
import javax.xml.ws.Endpoint;
public class RunService {
/**
*@paramargs
*/
public static void main(String[] args) {
System.out.println("SayHello Web Service started.");
Endpoint.publish("http://localhost:8080/wsServerExample" ,
new SayHello());
}
}
運行Run As>Java Application。我們得到結果,說明這個web service的Server端已經啟動。
6.查看WSDL:
Window>Show View>Other>General>Internal Web Browser,在其中輸入:http://localhost:8080/wsServerExample?wsdl
你可以看看到底WSDL都記錄了哪些信息。看完後可以停止該Server。
7.監測Server
我們創建完Server可以用過Eclipse Web Services Explorer監測Server,
Window>Open Perspective>Other >JavaEE
打開Eclipse Web Services Explorer
點擊右上角的WSDL Page按鈕:
單擊WSDL Main,在URL中輸入:http://localhost:8080/wsServerExample?wsdl 按Go按鈕後出現一下視圖:
我們可以觸發一個Web Service操作:點擊getGreetings,添加一個參數,比如gnuhpc,然後點擊Go按鈕:
8.創建Client端 工程和相關包與類:
創建一個Java Project,命名為wsClientHelloWorld,在這個項目下建立包:org.gnuhpc.wsClient
9.使用Ant產生Client代碼框架:
編寫Web service時,可以使用工具來利用WSDL生成進行調用的客戶端樁;或者也可以使用底層API來手動編寫Web service。前者方便,後者靈活,現在我們通過前者做說明:
新建文件build.xml
New>File>build.xml
<project default="wsimport">
<target name="wsimport">
<exec executable="wsimport">
<arg line="-keep -s ./src -p org.gnuhpc.wsClient
-d ./bin http://localhost:8080/wsServerExample?wsdl"/>
</exec>
</target>
</project>
注意:wsgen 支持從 Java class 創建 Web services,wsimport 支持從 WSDL 創建 Web services,分別對應於 JAX-RPC 方式下的 Java2WSDL 和 WSDL2Java。要根據發布的WSDL進行創建,這也就是為什麼要先運行RunServer的原因了。
運行Server的RunService : Run As>Java Application>
運行該Ant腳本,產生Client代碼:Run As>Ant Build
運行成功的提示如下:
生成的代碼如下:
這一步讀取WSDL並生成客戶端樁。這些樁是將為我們的代碼所用的Java類和介面。這些樁給伺服器端功能提供了一個客戶端介面。例如,如果我們的伺服器提供一個Maths服務,該服務帶有一個叫做add的方法。我們的客戶端代碼將調用樁上的一個方法,而樁實現將對該方法使用參數封裝,把Java方法調用變為Webservice請求。這個請求將基於HTTP發送給伺服器,而且將使用SOAP作為RPC協議。監聽伺服器接收該SOAP消息,然後(十有八九)將其轉換為伺服器處的一次方法調用。
3. web服務服務中的soap信息包括什麼內容
Types:定義了消息交換中使用的數據類型。在 DemoWebServiceService.wsdl 中,您可以導入 DemoWebServiceService_schema1.xsd,而不需要在 WSDL 文件中定義數據類型。
Message: 定義了所交換的消息。您有兩個消息,「hello」 和 「helloResponse」。消息 hello 其中有一部分是 「parameters」。這個部分有一個元素 「tns:hello」。而消息 helloResponse 其中有一部分是 「parameters」,剛好與 hello 的一樣。這個部分有一個元素 「tns:helloResponse」。這兩個元素 hello 和 helloResponse 都定義在 DemoWebServiceService_schema1.xsd 中。您很快會下面看到它的內容。
Port Type:支持終端的操作。一個操作會提供一個輸入消息和一個輸出消息。您有一個名為 「hello」 的操作,它由一個輸入消息 「tns:hello」 和一個輸出消息 「tns:helloResponse」 組成。這是一個請求-響應傳輸。一個 WSDL 為終端提供了 4 種不同的傳輸基本參數:
one-way
request-response
solicit-response
notification
在 one-way 傳輸中,一個終端只能接收消息。在 request-response 傳輸中,一個終端會先接收一個消息然後再發送一個相應的消息。在 solicit-response 傳輸中,一個終端會先發送一個消息然後再接收一個相應的消息。在 notification 傳輸中,一個終端只能發送消息。
Binding:定義了由一種埠類型定義的操作和消息的協議細節和消息格式規范。您會為 style 屬性提供一個 「document」。這個 style 屬性包含 2 種不同類型的消息,rpc 和 document。如果是 rpc,消息會包含了一些參數和返回值。如果是 document ,消息則包含一些文檔。transport 屬性的值包含了 SOAP 的傳輸 URI。http://schemas.xmlsoap.org/soap/http 表示您將使用 SOAP 規范中的 HTTP 綁定。您要為 soapAction 屬性中 SOAP 的 HTTP 綁定的 SOAPAction HTTP 頭指定 URI。由於您使用了一個 SOAP 的 HTTP 綁定,因此必須指定 soapAction 屬性的值。您可以為 soapAction 屬性指定一個空字元串,即 ""。soap:body 元素指定了如何在 SOAP 消息主體元素內聚集消息各部分。而 use 屬性則提供了兩個不同的選項:literal 和 encoded。如果您使用 literal,這表示您使用一個使用元素或類型屬性的具體的模式定義。如果您使用 encoded,那麼您使用的是帶有編碼規則的抽象類型。
Service:定義了一組相關的埠。
Port:通過為一個綁定指定一個網路地址而定義一個通信終端。
4. 什麼是SOAPWebService的原理和過程是怎樣的
Web Service 是一種新的web應用程序分支,他們是自包含、自描述、模塊化的應用,可以發布、定位、通過web調用。Web Service可以執行從簡單的請求到復雜商務處理的任何功能。一旦部署以後,其他Web Service應用程序可以發現並調用它部署的服務。
實際上,WebService的主要目標是跨平台的可互操作性。為了達到這一目標,WebService完全基於XML(可擴展標記語言)、XSD(XMLSchema)等獨立於平台、獨立於軟體供應商的標准,是創建可互操作的、分布式應用程序的新平台。由此可以看出,在以下三種情況下,使用WebService會帶來極大的好處。
長項一:跨防火牆的通信
如果應用程序有成千上萬的用戶,而且分布在世界各地,那麼客戶端和伺服器之間的通信將是一個棘手的問題。因為客戶端和伺服器之間通常會有防火牆或者代理伺服器。在這種情況下,使用DCOM就不是那麼簡單,通常也不便於把客戶端程序發布到數量如此龐大的每一個用戶手中。傳統的做法是,選擇用瀏覽器作為客戶端,寫下一大堆ASP頁面,把應用程序的中間層暴露給最終用戶。這樣做的結果是開發難度大,程序很難維護。
圖1通過WebService集成應用程序
舉個例子,在應用程序里加入一個新頁面,必須先建立好用戶界面(Web頁面),並在這個頁面後面,包含相應商業邏輯的中間層組件,還要再建立至少一個ASP頁面,用來接受用戶輸入的信息,調用中間層組件,把結果格式化為HTML形式,最後還要把「結果頁」送回瀏覽器。要是客戶端代碼不再如此依賴於HTML表單,客戶端的編程就簡單多了。
如果中間層組件換成WebService的話,就可以從用戶界面直接調用中間層組件,從而省掉建立ASP頁面的那一步。要調用WebService,可以直接使用MicrosoftSOAPToolkit或.NET這樣的SOAP客戶端,也可以使用自己開發的SOAP客戶端,然後把它和應用程序連接起來。不僅縮短了開發周期,還減少了代碼復雜度,並能夠增強應用程序的可維護性。同時,應用程序也不再需要在每次調用中間層組件時,都跳轉到相應的「結果頁」。
從經驗來看,在一個用戶界面和中間層有較多交互的應用程序中,使用WebService這種結構,可以節省花在用戶界面編程上20%的開發時間。另外,這樣一個由WebService組成的中間層,完全可以在應用程序集成或其它場合下重用。最後,通過WebService把應用程序的邏輯和數據「暴露」出來,還可以讓其它平台上的客戶重用這些應用程序。
長項二:應用程序集成
企業級的應用程序開發者都知道,企業里經常都要把用不同語言寫成的、在不同平台上運行的各種程序集成起來,而這種集成將花費很大的開發力量。應用程序經常需要從運行在IBM主機上的程序中獲取數據;或者把數據發送到主機或UNIX應用程序中去。即使在同一個平台上,不同軟體廠商生產的各種軟體也常常需要集成起來。通過WebService,應用程序可以用標準的方法把功能和數據「暴露」出來,供其它應用程序使用。
例如,有一個訂單登錄程序,用於登錄從客戶來的新訂單,包括客戶信息、發貨地址、數量、價格和付款方式等內容;還有一個訂單執行程序,用於實際貨物發送的管理。這兩個程序來自不同軟體廠商。一份新訂單進來之後,訂單登錄程序需要通知訂單執行程序發送貨物。通過在訂單執行程序上面增加一層WebService,訂單執行程序可以把「AddOrder」函數「暴露」出來。這樣,每當有新訂單到來時,訂單登錄程序就可以調用這個函數來發送貨物了。
長項三:B2B的集成
用WebService集成應用程序,可以使公司內部的商務處理更加自動化。但當交易跨越供應商和客戶、突破公司的界限時會怎麼樣呢?跨公司的商務交易集成通常叫做B2B集成。
WebService是B2B集成成功的關鍵。通過WebService,公司可以把關鍵的商務應用「暴露」給指定的供應商和客戶。例如,把電子下單系統和電子發票系統「暴露」出來,客戶就可以以電子的方式發送訂單,供應商則可以以電子的方式發送原料采購發票。當然,這並不是一個新的概念,EDI(電子文檔交換)早就是這樣了。但是,WebService的實現要比EDI簡單得多,而且WebService運行在Internet上,在世界任何地方都可輕易實現,其運行成本就相對較低。不過,WebService並不像EDI那樣,是文檔交換或B2B集成的完整解決方案。WebService只是B2B集成的一個關鍵部分,還需要許多其它的部分才能實現集成。
5. soa和soap分別是什麼
SOA,即面來向服務源的體系結構(Service-Oriented Architecture,也叫面向服務架構),是指為了解決在Internet環境下業務集成的需要,通過連接能完成特定任務的獨立功能實體實現的一種軟體系統架構。SOA是一個組件模型,它將應用程序的不同功能單元(稱為服務)通過這些服務之間定義良好的介面和契約聯系起來。介面是採用中立的方式進行定義的,它應該獨立於實現服務的硬體平台、操作系統和編程語言。
SOAP:簡單對象訪問協議,簡單對象訪問協議(SOAP)是一種輕量的、簡單的、基於 XML 的協議,它被設計成在 WEB 上交換結構化的和固化的信息。 SOAP 可以和現存的許多網際網路協議和格式結合使用,包括超文本傳輸協議( HTTP),簡單郵件傳輸協議(SMTP),多用途網際郵件擴充協議(MIME)。它還支持從消息系統到遠程過程調用(RPC)等大量的應用程序。
6. 伺服器上配置了SOAP服務,遠程能訪問,伺服器本調用就失敗
你注意一下埠問題,看是否服務端的埠有被其它程序調用。
另外不知道你是服務獨立一個程序還是服務端和客戶端都在一個程序。如果是後者則極易出問題。
7. SOAP是什麼WEBService是什麼
上專業的網站
http://www.java-cn.com/index.html
http://www.programsalon.com/
SOAP:簡單對象訪問協議
(:Simple Object Access Protocol)
簡單對象訪問協議(SOAP)是一種輕量的、簡單的、基於 XML 的協議,它被設計成在 WEB 上交換結構化的和固化的信息。 SOAP 可以和現存的許多網際網路協議和格式結合使用,包括超文本傳輸協議( HTTP),簡單郵件傳輸協議(SMTP),多用途網際郵件擴充協議(MIME)。它還支持從消息系統到遠程過程調用(RPC)等大量的應用程序。
Web service 就是一個應用程序,它向外界暴露出一個能夠通過Web進行調用的API。這就是說,你能夠用編程的方法通過Web來調用這個應用程序。
建議你到的網路裡面看看
8. PHP如何啟動soap服務
修改PHP.ini文件,找到;extension=php_soap.dll去掉前面的分號,重起IIS或者apache就可以了
9. SOAP介面 是什麼
SOAP = Simple Object Access Protocol,即簡單對象訪問協議。它是一種輕量的、簡單的、基於 XML 的協議,它被設計成在 WEB 上交換結構化的和固化的信息。 SOAP 可以和現存的許多網際網路協議和格式結合使用,包括超文本傳輸協議( HTTP),簡單郵件傳輸協議(SMTP),多用途網際郵件擴充協議(MIME)。它還支持從消息系統到遠程過程調用(RPC)等大量的應用程序。
通過 SOAP 協議實現的 Web 服務,使全世界的程序員編寫的類、函數可以集合起來,建成一個巨大的函數庫,而且是語言無關的。這為軟體事業描繪了一個燦爛的發展前景,只要網路連在一起,就可以實現代碼級的邏輯共享,過去的跨進程、跨機器、跨網路的通信問題全部都解決了,而且 http 協議是能夠穿越防火牆的(其實是防火牆一般不封鎖http協議的80埠,否則誰也別上互聯網)。
SOAP使用基於XML的數據結構和超文本傳輸協議(HTTP)的組合定義了一個標準的方法來使用Internet上各種不同操作環境中的分布式對象,SOAP介面一般用在軟體定義中,比如PHP語言和Java語言中,通常代表利用XML、http實現WebService服務的介面。
很多人非常看好這項技術,稱其「激動人心」。而 Web 服務實現起來又很簡單,可以簡單的基於現在互聯網上無數的 Web 平台來發布。簡單的往往是最美的,Web服務就是一個現實的例子。
PHP 中,在 php.ini 文件中開啟了 php_soap.dll 擴展後,就可以支持 SOAP了。
SOAP相對Socket也有自己的優勢,Socket 有兩個弊端:1、Socket必須另開埠,這個要在物理防火牆上開一個固定的埠(一般在公網的兩個系統很少這么干)。 2、Socket 服務端必須一直開一個接收的程序ServerSocket。使用soap就不會存在這樣的弊端,soap走的80埠,也是http協議之上的協議。
——希望能幫助到你!
10. REST和SOAP Web Service的區別比較
restful是一種架構風格,其核心是面向資源;而webService底層SOAP協議,主要核心是面向活動。
SOAP:簡單對象訪問協議,很輕量,同時作為應用協議可以基於多種傳輸協議來傳遞消息(Http,SMTP等)。
客戶端和伺服器端的通訊方式
總結:
REST對於資源型服務介面來說很合適,同時特別適合對於效率要求很高,但是對於安全要求不高的場景。而SOAP的成熟性可以給需要提供給多開發語言的,對於安全性要求較高的介面設計帶來便利。所以我覺得純粹說什麼設計模式將會占據主導地位沒有什麼意義,關鍵還是看應用場景。成熟度SOAP雖然發展到現在已經脫離了初衷,但是對於異構環境服務發布和調用,以及廠商的支持都已經達到了較為成熟的情況。不同平台,開發語言之間通過SOAP來交互的web service都能夠較好的互通。