新聞中心
本文包括兩個(gè)部分,***部分介紹了如何用.NET做客戶(hù)端調(diào)用Java寫(xiě)的Web Services,第二部分介紹了如何用Java做客戶(hù)端調(diào)用.NET開(kāi)發(fā)的Web Services。
項(xiàng)目需要的工具

◆WindowsXP Professial(IIS)
◆Eclipse3.1(已裝好Tomcat axis)
◆VS.Net 2003
備注:下載安裝Tomcat5.5.16 以及 Axis的開(kāi)發(fā)包,并做相應(yīng)配置??次仪耙黄臋n。
用.NET做客戶(hù)端調(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)
- {
- // 在此處放置用戶(hù)代碼以初始化頁(yè)面
- ws=new testWebService.JavaWebService.HelloClientService();
- }
- private void btnSend_Click(object sender, System.EventArgs e)
- {
- lblMsg.Text=ws.getName(txtName.Text);
- }
這樣,一個(gè).NET客戶(hù)端就完成了,測(cè)試一下,工作正常,OK.
用Java做客戶(hù)端調(diào)用.NET寫(xiě)的 Web Services
1. 用VS.NET新建一個(gè)Asp Web Services工程,添加一個(gè)web 服務(wù),命名為Service1.asmx。新增一個(gè)web method,代碼如下:
C# 代碼:
- //指定SoapAction
- [SoapRpcMethod(Action="http://www.xxx.com/Rpc",
RequestNamespace="http://www.xxx.com/SU",ResponseNamespace="http://www.xxx.com/SU")]- [WebMethod]
- public string getName(string name)
- {
- return "Hello"+name;
- }
然后運(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客戶(hù)端都要設(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與客戶(hù)端交換信息的過(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ù),它們之間的相互通信需要作特殊處理。
本文名稱(chēng):Java與.NET的WebServices相互調(diào)用
瀏覽路徑:http://m.fisionsoft.com.cn/article/ccsddoc.html


咨詢(xún)
建站咨詢(xún)
