欧美日韩不卡一区二区三区,www.蜜臀.com,高清国产一区二区三区四区五区,欧美日韩三级视频,欧美性综合,精品国产91久久久久久,99a精品视频在线观看

SUN認證

WebService的優(yōu)缺點

時間:2024-08-25 17:33:35 SUN認證 我要投稿
  • 相關推薦

WebService的優(yōu)缺點

  Web service是一個平臺的獨立,低耦合的,自包含的、基于可編程的web的應用程序,可使用開放的XML(標準通用標記語言下的一個子集)標準來描述、發(fā)布、發(fā)現(xiàn)、協(xié)調和配置這些應用程序,用于開發(fā)分布式的互操作的應用程序。

  1. 什么是WebService?

  對這個問題,我們至少有兩種答案。從表面上看,WebService 就是一個應用程序,它向外界暴露出一個能夠通過Web進行調用的API。這就是說,你能夠用編程的方法通過Web來調用這個應用程序。我們把調用這個 WebService 的應用程序叫做客戶。

  例如,你想創(chuàng)建一個WebService ,它的作用是返回當前的天氣情況。那么你可以建立一個ASP頁面,它接受郵政編碼作為查詢字符串,然后返回一個由逗號隔開的字符串,包含了當前的氣溫和天氣。要調用這個ASP頁面,客戶端需要發(fā)送下面的這個HTTP GET請求:http://host.company.com/weather.asp?zipcode=20171 返回的數(shù)據(jù)就應該是這樣:

  21,晴

  這個ASP頁面就應該可以算作是WebService了。因為它基于HTTP GET請求,暴露出了一個可以通過Web調用的API。當然WebService還有更多的東西。

  下面是對WebService更精確的解釋:WebService是建立可互操作的分布式應用程序的新平臺。作為一個Windows程序員,你可能已經(jīng)用 COM或DCOM建立過基于組件的分布式應用程序。COM是一個非常好的組件技術,但是我們也很容易舉出COM并不能滿足要求的情況。 WebService平臺是一套標準,它定義了應用程序如何在Web上實現(xiàn)互操作性。你可以用任何你喜歡的語言,在任何你喜歡的平臺上寫 WebService ,只要我們可以通過WebService標準對這些服務進行查詢和訪問。

  2. WebService的優(yōu)點:

  跨防火墻的通信

  如果應用程序有成千上萬的用戶,而且分布在世界各地,那么客戶端和服務器之間的通信將是一個棘手的問題。因為客戶端和服務器之間通常會有防火墻或者代理服務器。在這種情況下,使用DCOM就不是那么簡單,通常也不便于把客戶端程序發(fā)布到數(shù)量如此龐大的每一個用戶手中。傳統(tǒng)的做法是,選擇用瀏覽器作為客戶端,寫下一大堆ASP頁面,把應用程序的中間層暴露給最終用戶。這樣做的結果是開發(fā)難度大,程序很難維護。

  舉個例子,在應用程序里加入一個新頁面,必須先建立好用戶界面(Web頁面),并在這個頁面后面,包含相應商業(yè)邏輯的中間層組件,還要再建立至少一個 ASP頁面,用來接受用戶輸入的信息,調用中間層組件,把結果格式化為HTML形式,最后還要把“結果頁”送回瀏覽器。要是客戶端代碼不再如此依賴于 HTML表單,客戶端的編程就簡單多了。

  如果中間層組件換成WebService的話,就可以從用戶界面直接調用中間層組件,從而省掉建立ASP頁面的那一步。要調用 WebService,可以直接使用MicrosoftSOAPToolkit或.NET這樣的SOAP客戶端,也可以使用自己開發(fā)的SOAP客戶端,然后把它和應用程序連接起來。不僅縮短了開發(fā)周期,還減少了代碼復雜度,并能夠增強應用程序的可維護性。同時,應用程序也不再需要在每次調用中間層組件時,都跳轉到相應的“結果頁”。

  從大多數(shù)人的經(jīng)驗來看,在一個用戶界面和中間層有較多交互的應用程序中,使用WebService這種結構,可以節(jié)省花在用戶界面編程上20% 的開發(fā)時間。另外,這樣一個由WebService組成的中間層,完全可以在應用程序集成或其它場合下重用。最后,通過WebService把應用程序的邏輯和數(shù)據(jù)“暴露”出來,還可以讓其它平臺上的客戶重用這些應用程序。

  應用程序集成

  企業(yè)級的應用程序開發(fā)者都知道,企業(yè)里經(jīng)常都要把用不同語言寫成的、在不同平臺上運行的各種程序集成起來,而這種集成將花費很大的開發(fā)力量。應用程序經(jīng)常需要從運行在IBM主機上的程序中獲取數(shù)據(jù);或者把數(shù)據(jù)發(fā)送到主機或UNIX應用程序中去。即使在同一個平臺上,不同軟件廠商生產的各種軟件也常常需要集成起來。通過WebService,應用程序可以用標準的方法把功能和數(shù)據(jù)“暴露”出來,供其它應用程序使用。

  例如,有一個訂單登錄程序,用于登錄從客戶來的新訂單,包括客戶信息、發(fā)貨地址、數(shù)量、價格和付款方式等內容;還有一個訂單執(zhí)行程序,用于實際貨物發(fā)送的管理。這兩個程序來自不同軟件廠商。一份新訂單進來之后,訂單登錄程序需要通知訂單執(zhí)行程序發(fā)送貨物。通過在訂單執(zhí)行程序上面增加一層 WebService,訂單執(zhí)行程序可以把“AddOrder”函數(shù)“暴露”出來。這樣,每當有新訂單到來時,訂單登錄程序就可以調用這個函數(shù)來發(fā)送貨物了。

  B2B的集成

  用WebService集成應用程序,可以使公司內部的商務處理更加自動化。但當交易跨越供應商和客戶、突破公司的界限時會怎么樣呢?跨公司的商務交易集成通常叫做B2B集成。

  WebService是B2B集成成功的關鍵。通過WebService,公司可以把關鍵的商務應用“暴露”給指定的供應商和客戶。例如,把電子下單系統(tǒng)和電子發(fā)票系統(tǒng)“暴露”出來,客戶就可以以電子的方式發(fā)送訂單,供應商則可以以電子的方式發(fā)送原料采購發(fā)票。當然,這并不是一個新的概念,EDI(電子文檔交換)早就是這樣了。但是,WebService的實現(xiàn)要比EDI簡單得多,而且WebService運行在Internet上,在世界任何地方都可輕易實現(xiàn),其運行成本就相對較低。不過,WebService并不像EDI那樣,是文檔交換或B2B集成的完整解決方案。WebService只是 B2B集成的一個關鍵部分,還需要許多其它的部分才能實現(xiàn)集成。

  用WebService來實現(xiàn)B2B集成的最大好處在于可以輕易實現(xiàn)互操作性。只要把商務邏輯“暴露”出來,成為WebService,就可以讓任何指定的合作伙伴調用這些商務邏輯,而不管他們的系統(tǒng)在什么平臺上運行,使用什么開發(fā)語言。這樣就大大減少了花在B2B集成上的時間和成本,讓許多原本無法承受EDI的中小企業(yè)也能實現(xiàn)B2B集成。

  軟件和數(shù)據(jù)重用

  軟件重用是一個很大的主題,重用的形式很多,重用的程度有大有小。最基本的形式是源代碼模塊或者類一級的重用,另一種形式是二進制形式的組件重用。

  3. WebService的缺點

  單機應用程序

  目前,企業(yè)和個人還使用著很多桌面應用程序。其中一些只需要與本機上的其它程序通信。在這種情況下,最好就不要用WebService,只要用本地的 API就可以了。COM非常適合于在這種情況下工作,因為它既小又快。運行在同一臺服務器上的服務器軟件也是這樣。最好直接用COM或其它本地的API來進行應用程序間的調用。當然WebService也能用在這些場合,但那樣不僅消耗太大,而且不會帶來任何好處。

  局域網(wǎng)的同構應用程序

  在許多應用中,所有的程序都是用VB或VC開發(fā)的,都在Windows平臺下使用COM,都運行在同一個局域網(wǎng)上。例如,有兩個服務器應用程序需要相互通信,或者有一個Win32或WinForm的客戶程序要連接局域網(wǎng)上另一個服務器的程序。在這些程序里,使用DCOM會比SOAP/HTTP有效得多。與此相類似,如果一個.NET程序要連接到局域網(wǎng)上的另一個.NET程序,應該使用.NETremoting。有趣的是,在.NETremoting 中,也可以指定使用SOAP/HTTP來進行WebService調用。不過最好還是直接通過TCP進行RPC調用,那樣會有效得多。

  WebService應用

  1. JDK6增加了對WS的支持

  下面是WebService的一個簡單的服務應用

  Java代碼

  import javax.xml.ws.*;

  import javax.jws.*;

  import javax.jws.soap.*;

  @WebService(targetNamespace="http://localhost:7070/Ebay")

  @SOAPBinding(style = SOAPBinding.Style.RPC)

  public class HelloService

  {

  public static void main(String args)

  {

  Endpoint.publish("http://localhost:7070/Ebay",new HelloService());

  }

  @WebMethod

  public void sayHello()

  {

  System.out.println("hello");

  }

  }

  2. Axis安裝配置

  安裝JDK;

  安裝并配置Tomcat;

  從官方的網(wǎng)站http://ws.apache.org/axis下載最新的Axis項目打包文件,并將webapps下axis目錄拷貝到Tomcat的webapps目錄下;

  驗證Axis的安裝;

  瀏覽所發(fā)布的服務。 3. 服務器端開發(fā)

  即時發(fā)布

  使用即時發(fā)布首先需要一個實現(xiàn)服務功能的Java源文件,將其擴展名改為.jws(Java Web Service的縮寫),然后將該文件放到Tomcat下面的webappsaxis目錄下即可。但是JWS的web服務發(fā)布是一個很簡單的Web服務發(fā)布方式,在頁面中你不能使用包,而且由于代碼是在運行期被編譯的,所以在部署之后,你也很難找到錯誤所在。

  定制發(fā)布

  ① 編寫要發(fā)布為服務的java類

 、 編譯生成的class文件應該放在Tomcat下的webappsaxisWEB-INFclasses下面

 、 編寫deploy.wsdd 文件描述服務的名稱,入口等信息

 、 切換到命令航下,執(zhí)行

  java org.apache.axis.client.AdminClient –p 8085 deploy.wsdd 4. 調用web服務

  DLL動態(tài)接口調用方式(Dynamic Invocation Interface)

  Java代碼

  public static void main(String args) {

  try {

  String endpoint =

  "http://localhost:8080/axis/services/test1";

  //實例化一個服務對象service

  Service service = new Service();

  //創(chuàng)建一個空的調用對象Call,設置Call的操作名稱,目標地址,傳入?yún)?shù)等等

  //執(zhí)行調用后即可得到返回的結果

  Call call = (Call) service.createCall();

  call.setTargetEndpointAddress( new java.net.URL(endpoint) );

  call.setOperationName(new QName("http://soapinterop.org/", "add3") );

  // Call to addParameter/setReturnType as described in user-guide.html

  //call.addParameter("testParam",

  // org.apache.axis.Constants.XSD_STRING,

  // javax.xml.rpc.ParameterMode.IN);

  //call.setReturnType(org.apache.axis.Constants.XSD_STRING);

  Integer ret = (Integer) call.invoke( new Object { 1,3 } );

  System.out.println( ret);

  } catch (Exception e) {

  System.err.println(e.toString());

  }

  }

  動態(tài)代理方式(Dynamic Proxy)

  動態(tài)代理需要一個本地的接口作為代理

  Java代碼

  public interface ITestDynameicProxy extends Remote {

  public String getMessage() throws RemoteException;

  }

  public static void main(String args) throws Exception {

  String wsdlUrl = "http://localhost:8080/axis/test/Test.jws?wsdl";

  String nameSpaceUri = "http://soapinterop.org/";

  String serviceName = "Test1Service";

  String portName = "Test1";

  ServiceFactory serviceFactory = ServiceFactory.newInstance();

  Service service = serviceFactory.createService(

  new URL(wsdlUrl), new QName(nameSpaceUri,serviceName));

  ITestDynameicProxy proxy = (ITestDynameicProxy)service.getPort(

  new QName(nameSpaceUri,portName),ITestDynameicProxy.class);

  System.out.println(proxy.getMessage());

  }

  通過輸入wsdl地址,命名空間地址和服務名,用服務工廠創(chuàng)建出一個服務實例,再通過設置端口名得到一個服務類型的服務代理對象,通過該代理,就可以直接訪問web服務了。

  靜態(tài)方式(Stubs)

 、 按常規(guī)方式發(fā)布一個WebService

 、 得到wsdl文件

  * 通過web頁面直接另存為

  * 通過Java2WSDL工具類生成

  (java org.apache.axis.wsdl.Java2WSDL -o demo1.wsdl -l http://localhost:8080/axis/services/demo -n http://www.itcast.cn/test.Demo)

 、 利用WSDL2Java工具類生成客戶端調用代碼

  (java org.apache.axis.wsdl.WSDL2Java demo.wsdl -p client)

 、 在生成的代碼基礎上,進行客戶端的調用

  Java代碼

  public static void main(String args) throws ServiceException, RemoteException {

  DemoServiceLocator demoService = new DemoServiceLocator();

  Demo demo = demoService.getdemo();

  System.out.println(demo.getMessage());

  }

【W(wǎng)ebService的優(yōu)缺點】相關文章:

沖浪浴缸的優(yōu)缺點07-10

留學德國的優(yōu)缺點10-08

景觀硬質材料優(yōu)缺點08-23

RTK技術優(yōu)缺點及措施07-02

去新加坡留學優(yōu)缺點06-30

室內使用塑料的優(yōu)缺點09-09

樓梯材質分類及優(yōu)缺點10-05

新加坡留學優(yōu)缺點介紹06-25

AJAX的工作原理及優(yōu)缺點07-11

固態(tài)移動硬盤的優(yōu)缺點09-17