昨天花了近一个工作日时间,终于把Xfire web serivces客户端通过代理连接时出现417 HTTP code错误的问题给解决了!此问题纠结了近2个月了。

    此前,Xfire web serivces客户端的NTLM身份认证代理方式上网不给力,为此花了1个多礼拜时间解决了问题,xfire–core-1.26.jar的源码给修改了,自己弄了定制版的!

    尔后把项目部署到测试服务器,发觉测试服务器并不是使用NTLM身份验证代理的,本以为使用官方的xfire-core.jar就可以了,然而却发觉web services客户端与服务端连接时报417错误。经过查阅417错误代码,发觉是由于返回的数据不是期望的。这就更费解了!

    后来干脆把调试环境部署到测试服务器上,昨天在跟踪调试时无意中把xfire的发送通信请求的代码重复执行了1次,却奇迹般返回了200代码——成功!之后,反复测试,发觉确实通信2次才能够达到效果,而且返回的数据也是正确无误的。

    得到这个规律后,我又xfire-core.jar的代码做了修正,当通信返回码为417时,重复执行一次:
int maxTryCount=1;
while(417==returnCode && maxTryCount>0){
returnCode  = executeSend();//执行发送通信,并取得返回值
maxTryCount--;
}

    本想彻底解决417错误,一次通信就200,然而多次尝试未果(自己水平也有限)。我质疑这417错误的问题,不排除我们公司的Squid傻瓜代理出了傻瓜问题,很“个性化”。

    迄今为止,xfire的代理设置机制,可谓是比较完美了。