国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > .NET > 正文

Java與.NET 的Web Services相互調用

2024-07-10 13:01:42
字體:
來源:轉載
供稿:網友

一:簡介

本文介紹了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技術,它們之間的相互通信需要作特殊處理。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 隆化县| 枣庄市| 浙江省| 松潘县| 高台县| 邵阳县| 伽师县| 浦东新区| 长海县| 仪征市| 克东县| 汉阴县| 九台市| 蓬安县| 讷河市| 常熟市| 涿州市| 三穗县| 阿荣旗| 房产| 休宁县| 凌海市| 碌曲县| 宝鸡市| 惠来县| 射阳县| 吴旗县| 长春市| 三亚市| 阿拉善左旗| 宣化县| 白城市| 广德县| 龙南县| 泸西县| 甘肃省| 辽宁省| 元阳县| 专栏| 根河市| 禹城市|