Java與.NET 的Web Services相互調用

來源:互聯網
上載者:User
services|web 一:簡介

本文介紹了Java與.NET開發的Web Services相互調用的技術。本文包括兩個部分,第一部分介紹了如何用.NET做用戶端調用Java寫的Web Services,第二部分介紹了如何用Java做用戶端調用.NET開發的Web Services。



二:項目需要的工具

Windows2000 Server(IIS)

Jbuilder9.0( 含有Tomcat , axis)

JDK1.4+Java Web Services Develop

VS.Net 2003

備忘:如果沒有JBuilder的話就需要自己下載安裝Tomcat4.1 以及 Axis的開發包,並做相應配置。由於網上有很多這樣的文章,這裡就不一一說明了。



三:用.NET做用戶端調用Java寫的Web Services

1. 產生一個Java Web Services

使用JBuilder 產生一個Web Services是非常簡單的,我完全是按照它的協助做的,只要一步步做

下去就可以了。具體路徑是Developing Web Services -> tutorials : Web Services(Axis) -> Creating a simple Web Services

2. 發布這個Web Services並得到它的WSDL

Web Services產生好之後,F9運行這個項目。然後,單擊View瀏覽現有的Web 服務,單擊Bean1的WSDL串連,我們可以在瀏覽器中察看它的WSDL描述。在瀏覽器地址欄複製WSDL地址,為下一步使用.NET開發用戶端調用程式做準備。

3. 用VS.NET產生一個.NET的用戶端

建立一個項目(WinForm,ASP.net都可以),我在這裡使用的是一個Asp.Net項目。在起始頁面上放置一個文本輸入框用來顯示調用Web Services的結果,放置一個按鈕,用來單擊調用Web Services。然後,選擇添加Web 參考,在WSDL一欄中把剛才得到的WSDL地址複製過來,Web 參考的名稱輸入JavaService,單擊添加引用按鈕就可以了。此時,我們可以在VS.net 的Solution Explore中看到這個Web 參考。

在按鈕的單擊事件中輸入下列代碼:

JavaService.Bean1 bean = new JavaService.Bean1();

TextBox1.Text = bean.getSample.ToString ();



這樣,一個.NET用戶端就完成了,測試一下,工作正常,OK.



四:用Java做用戶端調用.NET寫的 Web Services

有了上面的成功,使我以為用Java做用戶端調用也是一件十分容易的事情,可實際情況卻耗費了我兩天時間才得以實現。

1. 用VS.NET建立一個Asp Web Services工程,添加一個web 服務,命名為SumService.asmx。新增一個web method,代碼如下:

[WebMethod]

public int IntAdd(int a,int b)

{

return a+b ;

}

然後運行它,並利用IE進行測試成功。

2. 開啟jbuilder9.0,建立一個項目,添加一個java class ,命名為TestNetService,輸入下列代碼:

package MyWebServiceJavaClient;

import java.util.Date;

import java.text.DateFormat;

import java.util.Date;

import java.text.DateFormat;

import org.apache.axis.client.Call;

import org.apache.axis.client.Service;

import javax.xml.namespace.QName;

import java.lang.Integer;

import javax.xml.rpc.ParameterMode;



/**

* <p>Title: </p>

* <p>Description: </p>

* <p>Copyright: Copyright (c) 2004</p>

* <p>Company: </p>

* @author not attributable

* @version 1.0

*/



public class TestNetService {

public TestNetService() {

}



public static void main(String[] args) {

try {

Integer i = new Integer(1);

Integer j = new Integer(2);

String endpoint="http://localhost/MyServices/WebServiceTest/SumService.asmx";



Service service = new Service();

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



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

call.setOperationName(new QName("http://www.my.com/SU","IntAdd"));



call.addParameter("a",org.apache.axis.encoding.XMLType.XSD_DATE,javax.xml.rpc.ParameterMode.IN);

call.addParameter("b",org.apache.axis.encoding.XMLType.XSD_DATE,javax.xml.rpc.ParameterMode.IN);

call.setReturnType(org.apache.axis.encoding.XMLType.XSD_INT);

call.setUseSOAPAction(true);

call.setSOAPActionURI("http://www.my.com/Rpc");





Integer k = (Integer)call.invoke(new Object[]{i,j});



System.out.println( "result is " + k.toString() + ".");

}

catch (Exception e) {System.err.println(e.toString());}

}



}



運行上面的java用戶端程式,你會發現系統會拋出一個SoapAction異常。奇怪,怎麼會錯誤呢?想到了我開發的asp web services沒有指定SoapAction,於是在SumService.asmx中的 [web method] 的上一行添加下列代碼:

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

重新編譯運行asp web services後,在執行java程式,這時會發現輸出了正確的結果3。

這樣,用java調用.net產生的web services也算初步完成了,好像也不是很複雜是吧。其實,在實際工作中,我一開始並沒有在網上找到一個很好的代碼例子,全部是依靠jbuilder 和 axis的協助完成的, 可總是提示什麼找不到相應的SoapAction。而實際上,我在運行了asp web services後是可以在IE瀏覽器中看到那個SoapAction的。我實驗過將預設的SoapAction拷貝到java代碼中,但是java用戶端依然拋出同樣的異常,這要我也很迷惑。



五:總結

經過兩天的實驗,終於從技術上明確了通過Web Services實現.net 與 java的互連是可能的。當然有幾點是需要注意的:

1. 在提供Web Services的時候,盡量使用xml schema中支援的變數類型做參數。如果使用.net 中的dataset這種類型,對於java來說解析起來將是一個災難,當然,理論上是可以解析的。但是從效率角度來說,在Web Services與用戶端交換資訊的過程中,始終有一個序列化和還原序列化的問題。如果使用dataset這種類型,系統還需要對它進行序列化操作,這將是一個很耗費資源的過程。而使用string類型將簡單很多。

2. 如果使用了soap header等擴充功能,例如使用了微軟提供的WSE技術,它們之間的相互連信需要作特殊處理。


相關文章

Beyond APAC's No.1 Cloud

19.6% IaaS Market Share in Asia Pacific - Gartner IT Service report, 2018

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。