2025-05-25

第一步:生成WCF服務


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


邀月工作室


各個項目的主要代碼:
service:
邀月工作室


Host:
邀月工作室


Client:
邀月工作室


編譯通過後,測試Host和Client分別成功:
邀月工作室


邀月工作室


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


我們看看生成的WSDL


邀月工作室


邀月工作室


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


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


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


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


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


此時,我們可以看到期待已久的wizard界面:
邀月工作室


邀月工作室


邀月工作室


邀月工作室


邀月工作室


邀月工作室


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


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


項目的結構應該如下圖:


邀月工作室


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


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


Access restriction: The type AxisFault is not accessible due to restriction on required library D:2000JavaAxis2libaxis2-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得到我們想要的服務結果瞭,簡單方法,將剛才生成的測試類的方法略作修改,即可運行。如下:
邀月工作室


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


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



 附:WCF的配置文件:


view plaincopy to clipboardprint?
<?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> 
       

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *