關於java調用.Net WCF服務的講解(二)

上次將wsHttpBinding改爲basicHttpBingding之後,java調用WCF服務成功。

這次將證書加入到上次那個簡單的WCF服務中去。

證書製作,綁定端口什麼的這邊就不講了,網上有關於這方面的講解。用到了XP系統的話是httpcfg.exe,Win7目前我還沒用過,反正是有一個差不多的工具。之前我也轉載過一個製作證書的文章。

這邊的話主要講配置文件,以及調用中我遇到的一些問題。

WCF服務配置文件:

 

在serviceBehaviors裏面的serviceMetadata配置中,一定要設置httpGetEnabled=“true”,之前我沒有設置,想通過wsdl2java -uri https://127.0.0.1:9001/test?wsdl 來生成axis2的服務代理,結果一直生成不了。錯誤代碼:

網上查了很多資料,大部分都是說Java調用WCF服務的過程中出現的這個錯誤,是證書沒有導入到java運行環境的security容器中。結果用網上提供的方法試了N次,還是失敗。

後來我反思,爲什麼要用https://127.0.0.1:9001/test?wsdl這個地址來生成代理呢?這個請求會被瀏覽器阻截,所以我沒有獲取wsdl文件,當然會失敗。然後嘗試用http://127.0.0.1:8889/test?wsdl這個地址來生成代理。就是上面設置的 

這一段。然後生成成功。很高興,以爲就要成功了。然後進行測試。結果失敗-_-!

測試代碼如下:

 

java的錯誤信息:

 

然後再到網上查找,結果發現就是之前找到的說是證書沒有導入到java運行環境的security容器中的錯誤,於是再導入證書,

導入證書的步驟:

 

1,在IE中訪問WSDL的URL,彈出“安全警報”窗口,查看證書->詳細信息標籤頁->複製到文件->下一步->下一步->指定文件名,將證書下載保存爲.cer文件,例如:test_axis.cer

2,用下載到的證書文件生成信任庫文件:

$ keytool -import -file test_axis.cer -storepass changeit -keystore client.truststore -alias serverkey -noprompt

3,在調用WebService代碼前指定信任庫文件的路徑:

System.setProperty("javax.net.ssl.trustStore", "/tmp/client.truststore");

System.setProperty("javax.net.ssl.trustStorePassword", "changeit");

然後在java調用代碼中加入

 

System.setProperty("javax.net.ssl.trustStore", "/tmp/client.truststore");

System.setProperty("javax.net.ssl.trustStorePassword", "changeit");

修改之後的java代碼:

 

然後運行,終於成功了。

調用結果:

 

 

下篇文章就是最後版本,加上用戶自定義賬戶密碼校驗,其實也很簡單的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章