1. 程式人生 > >使用WebService實現遠端呼叫

使用WebService實現遠端呼叫

   上篇部落格講解了使用Socket實現遠端呼叫,今天這篇講解WebService實現遠端呼叫。首先在開發之前,我們應該有自己的思路,心裡面想好開發的大體步驟,然後我們可以開始開發了。下面是我在寫的時候的一個思路,一起展示給大家。

首先需要有客戶端和服務端

服務端:
第一步:建立一個java工程,不需要匯入jar包。
第二步:建立一介面。在Webservice中叫做SEI(wsdl中叫做PortType)
第三步:建立一實現類。需要在實現類上加一個、@Webservice註解
第四步:釋出服務。EndPoint.publish釋出服務。

建立一個介面(天氣查詢服務SEI)

public interface WeatherInterface {

	String getWeatherByCityName(String cityName);
}

SEI實現類

@WebService
public class WeatherInterfaceImpl implements WeatherInterface {

	@Override
	public String getWeatherByCityName(String cityName) {
		System.out.println("接收到客戶端傳送的城市名稱:" + cityName);
		//查詢天氣
		String resultString = "暖和點兒了";
		System.out.println("返回天氣資訊:" + resultString);
		
		return resultString;
	}

}

建立天氣查詢服務釋出類

  這裡我們建議埠號為1024以後的,因為1024以下好多都是系統的埠號,容易起衝突。

public class WeatherServer {

	public static void main(String[] args) {
		//第一個引數:服務釋出的url
		//第二個引數:SEI實現類物件
		Endpoint.publish("http://127.0.0.1:12345/weather", new WeatherInterfaceImpl());
	}
}

檢視服務是否啟動,出現如下圖則說明發布成功。


使用wsdl

檢視wsdl:訪問服務釋出地址+?wsdl

我們只需要 注意service 和targetNamespace

可以使用wsimport工具生成客戶端呼叫程式碼。


 在學之前,先簡單介紹一下,wsimport是jdk自帶的webservice客戶端工具,可以根據wsdl文件生成客戶端呼叫程式碼(java程式碼)無論伺服器端的WebService是用什麼語言寫的,都可以生成呼叫webservice的客戶端程式碼,服務端通過客戶端程式碼呼叫webservice。 使用方法:
常用引數為:
-d<目錄>  - 將生成.class檔案。預設引數。
-s<目錄> - 將生成.java檔案(一般都使用這個)。
-p<生成的新包名> -將生成的類,放於指定的包下。如果不指定包名就是wsdl名稱空間的倒序。
(wsdlurl) - http://server:port/service?wsdl,必須的引數。
示例:
C:/> wsimport -s . http://127.0.0.1:1234/weather?wsdl 
注意:-s不能分開,-s後面有個小點

新建一個工程,找到工程的src目錄:


重新整理之後我們看到客戶端生成了如下程式碼:


一般我們用WeatherInterfaceImpl,和WeatherInterfaceImplService叫做服務檢視,就夠了。

客戶端的開發步驟。

實現步驟:

第一步:建立一個java工程

第二步:建立一服務檢視物件

第三步:從服務檢視中獲得PortType物件

第四步:呼叫PortType的方法(可以實現遠端通訊)

第五步:接收方法的返回值(服務端響應的結果)

第六步:列印結果。

public class WeatherClient {

	public static void main(String[] args) {
		//建立服務檢視
		WeatherInterfaceImplService service = new WeatherInterfaceImplService();
		//從服務檢視中獲得PortType物件
		WeatherInterfaceImpl portType = service.getWeatherInterfaceImplPort();
		//呼叫服務端方法
		String weatherInfo = portType.getWeatherByCityName("北京");
		System.out.println(weatherInfo);
		
	}
}

最終我們看到的結果:

服務端控制檯:


客戶端控制檯:


小結:

 既然之前寫了socket實現遠端通訊呼叫,小結裡面就寫一寫兩者的區別吧。

Webservice和sockt的對比

Socket:使用流通訊,需要自定義協議。程式設計複雜。
優點:通訊效率高,速度快,適合於傳輸大資料。
缺點:程式設計複雜。
Webservice:封裝所有通訊的細節,只需要像呼叫本地方法一樣使用即可。很方便。
優點:程式設計簡單。面向物件開發。
缺點:傳輸效率低。不適合傳輸大資料的情況。

相關推薦

使用WebService實現遠端呼叫

   上篇部落格講解了使用Socket實現遠端呼叫,今天這篇講解WebService實現遠端呼叫。首先在開發之前,我們應該有自己的思路,心裡面想好開發的大體步驟,然後我們可以開始開發了。下面是我在寫的

WebService技術總結(三):專案實戰——使用XML,dom4j,Xpath實現遠端呼叫

XML具有跨平臺性,在企業webservice開發中, 經常將請求引數封裝為XML,並且返回一個XML作為結果。 需求: 客戶端將發票號碼,發票程式碼作為條件,呼叫服務端,查詢金額,稅額資訊 客戶端請求引數xml形式: <?xml version="

## SpringBoot Dubbo Zookeeper 實現遠端呼叫

首先我們來了解dubbo+zookeeper是個什麼東西吧? Dubbo是 阿里巴巴公司開源的一個高效能優秀的服務框架,使得應用可通過高效能的 RPC 實現服務的輸出和輸入功能,可以和 Spring框架無縫整合。 ZooKeeper是一個分散式的,開放原始碼的

客戶端負載均衡器 Ribbon 整合Eureka實現遠端呼叫

Ribbon介紹 Ribbon是Netflix公司開源的一個負載均衡的專案(https://github.com/Netflix/ribbon),它是一個基於HTTP、TCP的客戶端負載均衡器。   什麼是負載均衡? 負載均衡是微服務架構中必須使用的技術,通過負載均衡來實

Hessian實現遠端呼叫

       Hessian是一個輕量級的remoting on http工具,採用的是Binary RPC協議,所以它很適合於傳送二進位制資料,同時又具有防火牆穿透能力。Hessian一般是通過Web應用來提供服務,因此非常類似於平時我們用的WebService。只是它

webservice瀏覽器遠端呼叫測試

    webservice開發測試階段,需要頻繁地呼叫webservice方法。怎麼能在遠端通過通過瀏覽器來呼叫webservice呢?答案很簡單,只需要在你的webconfig中,新增如下配置即可。     <system.web> <webSe

利用匿名管道實現遠端呼叫CMD

在一個程序裡用雙管道來回顯,程式碼如下: #include "windows.h" #include "stdio.h" unsigned long WINAPI readFuc(void *p); HANDLE hReadPipeCmd = NUL

Storm系列(五)DRPC實現遠端呼叫

Trident簡介 Trident擁有一流的抽象,可以讀取和寫入有狀態的來源。狀態可以是拓撲的內部 - 例如,儲存在記憶體中並由HDFS支援 - 或者外部儲存在Memcached或Cassandra等資料庫中。在任何一種情況下,Trident API都沒有區別。 Trident以容錯的方式管理狀態

RPC入門總結(三)RMI+Zookeeper實現遠端呼叫框架

一、RMI的弊端 RMI是侷限於Java語言中的RPC框架,除了其語言侷限之外,其實現上還有其他的一些弊端。 1. RMI的I/O模型使用BIO模型(偽非同步I/O),使用BIO和執行緒池的方式在大資料量、多連線情況下存在效能瓶頸。 2. RMI 使用了 Java 預設的

中介軟體技術CORBA的應用,實現遠端呼叫資料庫。

CORBA簡介 CORBA(Common Object Request Broker Architecture,公共物件請求代理體系結構,通用物件請求代理體系結構)是由OMG組織制訂的一種標準的面向物件應用程式體系規範。或者說CORBA體系結構是物件管理組織(

Dubbo學習筆記:註冊到zookeeper並實現遠端呼叫

我們選擇zookeeper作為註冊中心。 一、首先要下載zookeeper,把程式解壓,進入conf,把zoo_sample.cfg修改為zoo.cfg。進入bin資料夾,在這裡開啟命令列,輸入zkserver.cmd,這樣就啟動了zookeeper。 可以看出,zook

android app通過Geth RPC介面實現遠端呼叫

記錄一下APP怎麼通過以太坊的RPC介面實現遠端呼叫。此過程的環境為Window7和Android studio2.2.3。以web3_clientVersion為例。更多用法參考Geth JSON-RPC和Management APIs。首先啟動geth私有鏈並設定RPC埠

(三)遠端服務:RMI 服務實現遠端呼叫

RMI 與 Spring RMI 是 Java 平臺實現遠端呼叫的一種方式,於 JDK1.1 引入 Java 平臺。“Spring 簡化了 RMI 模型,它提供了一個代理工廠 Bean ,能讓我

淺談WebService跨平臺遠端呼叫技術

  基於瀏覽器的瘦客戶端應用程式並不是 因為瘦客戶能夠提供更好的使用者介面,而是因為它能夠避免花在桌面應用程式釋出上的高成本。釋出桌面應用程式成本很高,一半是因為應用程式安裝和配置的問 題,另一半是因為客戶和伺服器之間通訊的問題。傳統的Windows富客戶應用程式使用DCOM來與伺服器進行通訊和呼叫遠端物件。

Dubbo實現遠端呼叫介面

1. Dubbo框架的簡單格式如下如所示: 1)提供了一個api包,用於標出provider提供的所有介面名稱; 2)提供一個provider(生產者)包,用於實現所有的介面,並可以註冊到zookeeper上,統一管理; 3)提供一個consumer(

Spring RMI實現遠端呼叫

1. Spring 除了使用基於 HTTP 協議的遠端呼叫方案,還為開發者提供了基於 RMI 機制的遠端呼叫方法, RMI 遠端呼叫網路通訊實現是基於 TCP/IP 協議完成的,而不是通過 HTTP 協議。 在 Spring RMI 實現中,集成了標準的 RMI-JRIM

Aittit rpc的實現協議 JSON-RPC XML-RPC . Ws協議webservice 目錄 1. XML-RPC協議 1 1.1. JSON-RPC遠端呼叫協議 - CieloSun

Aittit rpc的實現協議  JSON-RPC XML-RPC . Ws協議webservice   目錄 1. XML-RPC協議 1 1.1. JSON-RPC遠端呼叫協議 - CieloSun - 部落格園.html 1 1.2.

Aittit rpc的實現協議 JSON-RPC XML-RPC . Ws協議webservice 目錄 1. XML-RPC協議 1 1.1. JSON-RPC遠端呼叫協議

Aittit rpc的實現協議  JSON-RPC XML-RPC . Ws協議webservice 目錄 XML-RPC協議 xml-rpc 是一套規範及其一系列的實現,允許執行在不同作業系統、不同環境的程式基於internet進行

遠端呼叫webservice介面的實現方法

   我們如何通過遠端的方式呼叫webservice介面,今天做以如下分享。 關於java webservice的框架,主要有四種, 方法1:HttpClient3.0.x;HttpClient4.x

JAVA RPC遠端呼叫伺服器實現使用者登入、註冊

先來百科掃盲 : 什麼是 RPC(反正我也剛看的) RPC(Remote Procedure Call)—遠端過程呼叫,它是一種通過網路從遠端計算機程式上請求服務,而不需要了解底層網路技術的協議。RPC協議假定某些傳輸協議的存在,如TCP或UDP,為通訊程式之間攜帶資訊資料。在OSI