日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

Java调用.NET的WCF

發布時間:2024/9/27 asp.net 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java调用.NET的WCF 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

最近開始了解WCF。寫了個最簡單的Helloworld,想通過java客戶端實現通信。沒想到以我的基礎,居然花了整整兩天(當然是工作以外的時間,呵呵),整個過程大費周折,特寫下此文,以供有需要的朋友參考:

第一步:生成WCF服務

新建WCF解決方案,分別添加三個項目,HelloTimeService(類庫),HelloTimehost(控制臺程序),HelloTimeClient(控制臺程序),項目結構如圖:

各個項目的主要代碼:
service:

Host:

Client:

編譯通過后,測試Host和Client分別成功:

保持Host程序打開,這樣,WCF服務就一直可以被外部程序調用。當然也包括Java客戶端。

我們看看生成的WSDL

第二步:調用WCF生成的WSDL生成java客戶端。

首先,請允許我介紹下axis2,它的官方地址:http://ws.apache.org/axis2/

這是一個java平臺的web service解決方案。我們最常用的是WSDL2Java和Java2WSDL兩個功能。

關于Web service的另一個解決方案是xFire,我沒試過。

關于命令行執行WSDL2Java,我也沒有執行成功! 我這里介紹的是Code Generator Wizard - eclipse Plug-in,一個Eclipse的插件。而且是在參考了眾多解決方案才配置成功!

特別感謝yycxbjl的這篇文章:http://www.cnblogs.com/yycxbjl/archive/2010/06/14/1758063.html

我的Java整個配置環境:

1.安裝JDK并配置環境變量

JAVA_HOME=D:/2000/Java/JDKUpdate(注意,不帶版本號是為了以后升級時只復制文件,而不必修改環境變量。)
path=%JAVA_HOME%/bin;
classpath=.;%JAVA_HOME%/lib;%JAVA_HOME%/lib/tools.jar

2.下載并安裝Eclipse3.6,就是大家熟悉的太陽神Helios(解壓即可)
解壓到:D:/2000/Java/Eclipse

3.下載Tomcat6.0.29(本文中使用的是綠色版,故解壓即完成)
解壓到:D:/2000/Java/tomcat(注意,不帶版本號是為了以后升級時只復制文件,而不必修改環境變量。)
由于安裝的是tomcat6.0不用配置tomcat的環境變量,至于以前的版本可以查資料。
需要設置TOMCAT_HOME,CATAlINA等環境變量


4.從 http://ws.apache.org/axis2/download/1_4_1/download.cgi下載 axis2-1.4.1-bin.zip
解壓到:D:/2000/Java/Axis2,注意不要下載Axis2 1.5.1,原因(據yycxbjl說:“最新版的 1.5.0 與 1.5.1 中沒有 backport-util-concurrent-3.1.jar, 無法解決:使用axis2-eclipse-codegen-wizard插件,從wsdl文件生成java文件時出錯無法繼續的問題,故不使用。)

5.下載1.4.1版的 axis2-eclipse-codegen-wizard 與 axis2-eclipse-service-archiver-wizard

http://ws.apache.org/axis2/tools/1_0/eclipse/wsdl2java-plugin.html#operation1

(但解壓后里面顯示是1.3.0, 解壓到:D:/2000/java/Eclipse/dropins (連壓縮包中的根目錄一起解壓出來)。也可以用傳統的link方法部署。

復制 D:/2000/Java/Axis2/lib/backport-util-concurrent-3.1.jar 與 geronimo-stax-api_1.0_spec-1.0.1.jar
到:D:/2000/Java/Eclipse/dropins/Axis2_Codegen_Wizard_1.3.0/lib, 并編輯:D:/2000/Java/Eclipse/dropins/Axis2_Codegen_Wizard_1.3.0/plugin.xml
在 runtime 下 添加
<library name="lib/backport-util-concurrent-3.1.jar">
<export name="*"/>
</library>
<library name="lib/geronimo-stax-api_1.0_spec-1.0.1">
<export name="*"/>
</library>

將Axis2_Codegen_Wizard_1.3.0重命名為Axis2_Codegen_Wizard_1.4.1,(這是整個部署的關鍵!這里邀月折騰了整整一天!)


新建一個Java project,命名為GetWCFInfoByJavaClient,并在新項目中添加新向導,File-New

此時,我們可以看到期待已久的wizard界面:

此進,在新建的GetWCFInfoByJavaClient項目中建一個package,命名為org.tempuri,與前面自定義的命名空間一致。將生成的兩個類文 件,ServiceCallbackHandler.java和ServiceStub.java文件添加進來,并在jreSE1.6庫中添加d:/2000/Java/Axis2/lib下所有jar文件的引用。

注意此時有個特殊的文件,即Axis2_Codegen_Wizard_1.4.1/lib/axis2-1.4.1.jar,需要手動復制到d:/2000/java/axis2/lib下并添加到項目的jre庫中,這是邀月第二個卡殼的地方,琢磨了好久,慎之慎之。

項目的結構應該如下圖:

eclipse的命名空間提示就是比vs強啊!很喜歡Ctrl+1。呵呵。微軟要是能做到這點,那該多好啊!

要命的是,此時庫都添加完成,檢查代碼也無誤,居然編譯錯誤,提示:

Access restriction: The type AxisFault is not accessible due to restriction on required library D:/2000/Java/Axis2/lib/axis2-kernel-1.4.1.jar



這下我傻眼了,于是趕緊google,這兩天google.com老是無故罷工,真是禍不單行,終于找到一篇老外的文章,說是如下,即可解決:
* Go to the Build Path settings in the project properties. Windows -> Preferences -> Java Compiler
* Remove the JRE System Library
* Add another JRE with a "perfect match"
* clean and build your project again. It worked for me.

試了下,我的默認jre環境果然是JDK5,于是換為jre system library


終于編譯成功!看到曙光了,

此時,最后的工作就是在Main中調用stub得到我們想要的服務結果了,簡單方法,將剛才生成的測試類的方法略作修改,即可運行。如下:

這正是我們想要的結果。

關于java與.net交互的其他文章,請參考:

微軟示例:

Java/.NET Interoperability with the Microsoft.com Web Service
http://msdn.microsoft.com/en-us/library/ms953968.aspx

Interoperability Testing

http://msdn.microsoft.com/en-us/library/aa480510.aspx

IBM示例:使用 Eclipse 和 Java SE 6 創建獨立 Web Services 應用程序,第 1 部分: Web Services 服務端應用程序(該鏈接需要先注冊)

https://www6.software.ibm.com/developerworks/cn/education/webservices/ws-eclipse-javase1/section2.html

小結: 這雖然只是一個簡單的demo,但我問了許多人,并在論壇發問,可是由于使用環境的不同,最終沒找到類似的環境,只好自己摸索實踐,好在還有一點點java基礎,另外網上幾個論壇像javaeye提供的答案過于陳舊,這正是java初學者苦惱之處,這點來看,微軟的開發環境無論如何是值得稱贊的,至少它不用跑到別的地盤去問答案。eclipse/tomcat/axis等代表的服務器和開發環境、插件配置非常的讓初學者無奈!因為你不知道某個jar是 否與其他幾千個jar很好的兼容。不知道java高手們是否指一條明道,非常感謝!并再次感謝yycxb

下篇文章介紹WCF客戶端如何調用java的web service,那要簡單多了。敬請關注。


附:WCF的配置文件:

[xhtml] view plaincopyprint?
  • <?xml version="1.0" encoding="utf-8" ?>
  • <configuration>
  • <system.web>
  • <compilation debug="true" />
  • </system.web>
  • <system.serviceModel>
  • <services>
  • <service name="Sample.WCF.HelloTimeForJava.Service" behaviorConfiguration="MyServiceTypeBehaviors">
  • <endpoint address="HelloTimeService" binding="wsHttpBinding" contract="Sample.WCF.HelloTimeForJava.IService">
  • <identity>
  • <dns value="localhost" />
  • </identity>
  • </endpoint>
  • <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
  • <host>
  • <baseAddresses>
  • <add baseAddress="http://localhost:8000/" />
  • </baseAddresses>
  • </host>
  • </service>
  • </services>
  • <behaviors>
  • <serviceBehaviors>
  • <behavior name="MyServiceTypeBehaviors">
  • <serviceMetadata httpGetEnabled="True" httpGetUrl=""/>
  • <serviceDebug includeExceptionDetailInFaults="False" />
  • </behavior>
  • </serviceBehaviors>
  • </behaviors>
  • </system.serviceModel>
  • </configuration>
  • <?xml version="1.0" encoding="utf-8" ?> <configuration><system.web><compilation debug="true" /></system.web><system.serviceModel><services><service name="Sample.WCF.HelloTimeForJava.Service" behaviorConfiguration="MyServiceTypeBehaviors"><endpoint address="HelloTimeService" binding="wsHttpBinding" contract="Sample.WCF.HelloTimeForJava.IService"><identity><dns value="localhost" /></identity></endpoint><endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" /><host><baseAddresses><add baseAddress="http://localhost:8000/" /></baseAddresses></host></service></services><behaviors><serviceBehaviors><behavior name="MyServiceTypeBehaviors"><serviceMetadata httpGetEnabled="True" httpGetUrl=""/><serviceDebug includeExceptionDetailInFaults="False" /></behavior></serviceBehaviors></behaviors></system.serviceModel> </configuration>


    相關鏈接:











































    主要說說JAVA如何調用WCF服務。

      Java環境下生成代理類的工具有很多,如wsdl2Java,wsimport 等。本文中使用的工具是wsimport。

      wsdl2Java 生成命令實例:

      

    ?
    1 wsdl2Java -p packageName -d C:\ProxyClass http://127.0.0.1/WcfService/TestService.svc?wsdl

      命令說明:

      -p:生成文件的包名稱

    -d: 生成路徑

      后面就是wsdl的地址,如果用服務地址(不帶?wsdl)貌似不行

      Java環境下的都是包結構,和C#不一樣。

      本文使用wsimport生成代理調用了WCF服務。

      調用步驟:

      1、在Java工程所在的文件夾中建立文件夾,以放置生成的Java文件。如下圖:

      

      2、針對不同的服務生成代理,以放在不同的文件夾中:如生成LoginService.svc的命令如下:

      注意以上紅色標識部分:為存放的文件夾名稱。運行以上命令后生成的文件如下:

      重復1、2 生成其他服務的代理。主要修改的就是存放路徑與服務地址。

      3、在工程的src中右鍵添加包(注意:這里的包名稱需通命令中指定的包名次相同),如下圖:

    4、將生成的文件復制到包中

    5、調用:

    public static void main(String[] args) {// TODO Auto-generated method stub LoginService loginService=new LoginService();ILogin loginProxy= loginService.getBasicHttpBindingILogin();String token= loginProxy.login("admin","123456");System.out.println(token);}

    運行結果:












































    使用分布式編程,很方便不同編程語言之間互相訪問,但也必須注意一些技術細節,實現起來才能暢通無阻,取得事半功倍的效果。

    首先,創建一個WCF。使用原有網站或新建一個網站,并將端口動態改為固定,如設成8000。在網站中添加WCF服務,取名字為:GetAccountService.svc,這時同時生成了一個接口:IGetAccountService.cs和一個實現類:GetAccountService.cs,并且有一個默認方法。我們為了測試對數據庫的訪問,將方法改為:GetAccount。

    完成的代碼如下:

    1.IGetAccountService.cs

    與50位技術專家面對面20年技術見證,附贈技術全景圖

    總結

    以上是生活随笔為你收集整理的Java调用.NET的WCF的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。