上次將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代碼:
然後運行,終於成功了。
調用結果:
下篇文章就是最後版本,加上用戶自定義賬戶密碼校驗,其實也很簡單的。