日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
Java與.NET的WebServices相互調(diào)用

本文包括兩個(gè)部分,***部分介紹了如何用.NET做客戶端調(diào)用Java寫(xiě)的Web Services,第二部分介紹了如何用Java做客戶端調(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)配置。看我前一片文檔。

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

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

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

Java代碼:

 
 
 
  1. public class HelloClient      
  2. {      
  3. public String getName(String name)      
  4. {      
  5. return "Hello,"+name;      
  6. }      
  7. }    

右鍵此文件選擇"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 引用的名稱輸入JavaWebService,單擊添加引用按鈕就可以了。此時(shí),我們可以在VS.net 的Solution Explore中看到這個(gè)Web 引用。添加代碼如下:

C# 代碼:

 
 
 
  1. protected System.Web.UI.WebControls.TextBox txtName;      
  2. protected System.Web.UI.WebControls.Button btnSend;      
  3. protected System.Web.UI.WebControls.Label lblMsg;      
  4.      
  5. private JavaWebService.HelloClientService ws;      
  6. private void Page_Load(object sender, System.EventArgs e)      
  7. {      
  8. // 在此處放置用戶代碼以初始化頁(yè)面      
  9. ws=new testWebService.JavaWebService.HelloClientService();      
  10. }      
  11.      
  12. private void btnSend_Click(object sender, System.EventArgs e)      
  13. {      
  14. lblMsg.Text=ws.getName(txtName.Text);      
  15. }     

這樣,一個(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代碼:

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

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

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


當(dāng)前標(biāo)題:Java與.NET的WebServices相互調(diào)用
分享地址:http://www.5511xx.com/article/ccsddoc.html