您的位置:首页 > 编程语言 > Java开发

eclipse生成的webservice客户端调用webservice接口返回值慢的问题

2016-11-04 14:20 543 查看
        最近在对接一个webservice接口的时候,为了方便直接用eclipse生成了webservice的客户端,发现一个奇怪的问题,调用webservice的时候调用速度很快,但是返回数据很慢,每次需要5分钟左右才能接收到服务端返回的值。奇葩就奇葩在隔了五分钟才返回一个值。最后找了好久原因,发现情况eclipse生成的客户端发送的是基于HTTP 1.0的请求,如下图:



       找了资料发现HTTP1.0和HTTP 1.1的区别:HTTP 1.0规定浏览器与服务器只保持短暂的连接,浏览器的每次请求都需要与服务器建立一个TCP连接,服务器完成请求处理后立即断开TCP连接,服务器不跟踪每个客户也不记录过去的请求。具体的见另一篇博客:http://blog.csdn.net/u012470138/article/details/53034301

     然后在客户端加上声明,声明是HTTP1.1,只要加上一行代码:

_call.setPropert(org.apache.axis.MessageContext.HTTP_TRANSPORT_VERSION,

HTTPConstants.HEADER_PROTOCOL_V11);瞬间解决了这个问题,调用和获得返回值十分的快。如下是服务端截取的请求协议:



完整代码如下:

public java.lang.String getBlackPhone(java.lang.String account, java.lang.String password, java.lang.String phone) throws java.rmi.RemoteException {

        if (super.cachedEndpoint == null) {

            throw new org.apache.axis.NoEndPointException();

        }

        org.apache.axis.client.Call _call = createCall();

       //其实将下面那行代码放在createCall()这个方法里面更通用

        _call.setProperty(org.apache.axis.MessageContext.HTTP_TRANSPORT_VERSION, HTTPConstants.HEADER_PROTOCOL_V11);

        _call.setOperation(_operations[0]);

        _call.setUseSOAPAction(true);

        _call.setSOAPActionURI("http://www.139.net/GetBlackPhone");

        _call.setEncodingStyle(null);

        _call.setProperty(org.apache.axis.client.Call.SEND_TYPE_ATTR, Boolean.FALSE);

        _call.setProperty(org.apache.axis.AxisEngine.PROP_DOMULTIREFS, Boolean.FALSE);

        _call.setSOAPVersion(org.apache.axis.soap.SOAPConstants.SOAP11_CONSTANTS);

        _call.setOperationName(new javax.xml.namespace.QName("http://www.139.net", "GetBlackPhone"));

        setRequestHeaders(_call);



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息