关于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代码:

 

然后运行,终于成功了。

调用结果:

下篇文章就是最后版本,加上用户自定义账户密码校验,其实也很简单的。

猜你喜欢

转载自blog.csdn.net/cch5487614/article/details/6306458