在XFire的client端的实现中,默认是采用HTTP1.1来进行请求的,也就是说,会默认在HTTP的request header中加入expect字段。以下是一个请求头的报文。
POST /crowd/services/SecurityServer HTTP/1.1 SOAPAction: "" Content-Type: text/xml; charset=UTF-8 Accept-Encoding: gzip User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; XFire Client +http://xfire.codehaus.org) Host: localhost:8080 Expect: 100-continue Content-Length: 503
你可以看到Expect:100-continue,这是在HTTP1.1中加入的。XFire的实现中,如果server端不支持1.1,那么就会有一个3000ms的timeout,于是这个lag就出现了,3s是一个很大的性能问题了吧。
XFire的client实现依赖于HTTPClient,所以,办法是把expect头给关掉。
client.setProperty(CommonsHttpMessageSender.DISABLE_EXPECT_CONTINUE,"true");
在CXF中已经不再使用HTTPClient来作为客户端的实现代理,而是使用Java的内部实现,包括javax.wsdl等一系列的比较新的API。
XFire在现在看来毕竟还是有点锉了,现在CXF的实现变了很多也成熟很多,如果不是因为有legacy的应用,还是应该用CXF为好。
19:16, 2009-11-03Chris /
技术贴啊!