溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Java與.NET中怎么調(diào)用WebServices

發(fā)布時(shí)間:2021-07-20 10:51:06 來(lái)源:億速云 閱讀:125 作者:Leah 欄目:編程語(yǔ)言

Java與.NET中怎么調(diào)用WebServices,相信很多沒(méi)有經(jīng)驗(yàn)的人對(duì)此束手無(wú)策,為此本文總結(jié)了問(wèn)題出現(xiàn)的原因和解決方法,通過(guò)這篇文章希望你能解決這個(gè)問(wèn)題。


 
項(xiàng)目需要的工具 

◆WindowsXP Professial(IIS)

◆Eclipse3.1(已裝好Tomcat axis)

◆VS.Net 2003

備注:下載安裝Tomcat5.5.16 以及 Axis的開(kāi)發(fā)包,并做相應(yīng)配置??次仪耙黄臋n。

用.NET做客戶端調(diào)用Java寫(xiě)的Web Services

1.生成一個(gè)JavaWeb Services

使用Eclipse生成一個(gè)Web Services是非常簡(jiǎn)單的。新建一個(gè)Web工程,右鍵建立一個(gè)Class,名為HelloClient.java。代碼如下:

Java代碼:

public class HelloClient      {      public String getName(String name)      {      return "Hello,"+name;      }      }

右鍵此文件選擇"WebServices"-->"Create Web Service"即可部署為本機(jī)的一個(gè)ws。在IE瀏覽器中輸入http://localhost:8008/testWebService/services/HelloClient可以看到已經(jīng)部署了的HelloClient服務(wù)。輸入http://localhost:8008/testWebService/services/HelloClient?wsdl這個(gè)服務(wù)的描述文件。

新建一個(gè)項(xiàng)目(WinForm,ASP.net都可以),我在這里使用的是一個(gè)Asp.Net項(xiàng)目。在起始頁(yè)面上放置一個(gè)文本輸入框用來(lái)輸入,一個(gè)標(biāo)簽用來(lái)顯示調(diào)用Web Services的結(jié)果,放置一個(gè)按鈕,用來(lái)單擊調(diào)用Web Services。然后,選擇添加Web 引用,URL一欄里填入http://localhost:8008/testWebService/services/HelloClient?wsdl,Web 引用的名稱(chēng)輸入JavaWebService,單擊添加引用按鈕就可以了。此時(shí),我們可以在VS.net 的Solution Explore中看到這個(gè)Web 引用。添加代碼如下:

C# 代碼:

protected System.Web.UI.WebControls.TextBox txtName;      protected System.Web.UI.WebControls.Button btnSend;      protected System.Web.UI.WebControls.Label lblMsg;           private JavaWebService.HelloClientService ws;      private void Page_Load(object sender, System.EventArgs e)      {      // 在此處放置用戶代碼以初始化頁(yè)面      ws=new testWebService.JavaWebService.HelloClientService();      }           private void btnSend_Click(object sender, System.EventArgs e)      {      lblMsg.Text=ws.getName(txtName.Text);      }

這樣,一個(gè).NET客戶端就完成了,測(cè)試一下,工作正常,OK.

用Java做客戶端調(diào)用.NET寫(xiě)的 Web Services

1. 用VS.NET新建一個(gè)Asp Web Services工程,添加一個(gè)web 服務(wù),命名為Service1.asmx。新增一個(gè)web method,代碼如下:

C# 代碼:

  1. //指定SoapAction      

  2. [SoapRpcMethod(Action="http://www.xxx.com/Rpc",
    RequestNamespace="http://www.xxx.com/SU",ResponseNamespace="http://www.xxx.com/SU")]      

  3. [WebMethod]      

  4. public string getName(string name)      

  5. {      

  6. return "Hello"+name;      

  7. }   

然后運(yùn)行它,并利用IE進(jìn)行測(cè)試成功。

2. 打開(kāi)Eclipse,新建一個(gè)Web項(xiàng)目,添加一個(gè)JSP頁(yè)面 ,命名為action_hello.jsp,輸入下列代碼:

Java代碼:

<%@page pageEncoding="GBK" contentType="text/html; charset=GBK" %>      <%@page import="org.apache.axis.client.Call"%>      <%@page import="org.apache.axis.client.Service"%>      <%@page import="javax.xml.namespace.QName"%>      java 代碼  <%      request.setCharacterEncoding("GBK");      String name=request.getParameter("name");      String endpoint="http://localhost/HelloClient/Service1.asmx";      Service service = new Service();      Call call = (Call)service.createCall();      call.setTargetEndpointAddress(new java.net.URL(endpoint));      call.setOperationName(new QName("http://www.zjh.com/SU","getName"));      call.addParameter("name",org.apache.axis.encoding.XMLType.XSD_DATE,javax.xml.rpc.ParameterMode.IN);      call.setReturnType(org.apache.axis.encoding.XMLType.XSD_STRING);      call.setUseSOAPAction(true);      call.setSOAPActionURI("http://www.zjh.com/Rpc");      String res =(String)call.invoke(new Object[]{name});      out.print(res);      %>

這個(gè)要比Java調(diào)用Java寫(xiě)的ws來(lái)的復(fù)雜。ws和Java客戶端都要設(shè)置SOAPAction,否則會(huì)有異常說(shuō) System.Web.Services.Protocols.SoapException: 服務(wù)器未能識(shí)別 HTTP 標(biāo)頭 SOAPAction 的值

總結(jié)

經(jīng)過(guò)兩天的試驗(yàn),終于從技術(shù)上明確了通過(guò)Web Services實(shí)現(xiàn).net 與 java的互通是可能的。當(dāng)然有幾點(diǎn)是需要注意的:

1. 在提供Web Services的時(shí)候,盡量使用xml schema中支持的變量類(lèi)型做參數(shù)。如果使用.net 中的dataset這種類(lèi)型,對(duì)于java來(lái)說(shuō)解析起來(lái)將是一個(gè)災(zāi)難,當(dāng)然,理論上是可以解析的。但是從效率角度來(lái)說(shuō),在Web Services與客戶端交換信息的過(guò)程中,始終有一個(gè)序列化和反序列化的問(wèn)題。如果使用dataset這種類(lèi)型,系統(tǒng)還需要對(duì)它進(jìn)行序列化操作,這將是一個(gè)很耗費(fèi)資源的過(guò)程。而使用string類(lèi)型將簡(jiǎn)單很多。

2. 如果使用了soap header等擴(kuò)展功能,例如使用了微軟提供的WSE技術(shù),它們之間的相互通信需要作特殊處理。

看完上述內(nèi)容,你們掌握J(rèn)ava與.NET中怎么調(diào)用WebServices的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI