您是否知道创建Web服务客户端服务实例的成本是多少?

 JavaWebService service = new JavaWebService();
 SomePort port = service.getJavaWebServicePort();

在多线程环境(webapp)中重用同一端口一次并创建一次服务并不危险?

请注意,端口getPort和端口本身不是线程安全的,但是每次创建服务时,如果这是一项昂贵的操作,则可能会出现问题。

任何想法 ?

谢谢

最佳答案

在JAX-WS引用实现(地铁)中,JavaWebService的创建是廉价的(在我们生成的客户端中,我们倾向于发现这大约需要20毫秒)。
SomePort的首次创建非常昂贵(对我们而言约为200毫秒);随后在同一getSomePort()实例上对JavaWebService的调用要快得多(对我们来说大约3ms)。

因此,每次需要获取JavaWebService都创建SomePort的实现会带来一定程度的费用。简而言之,问题的答案是“相当昂贵”。

但是,即使SomePort上的方法不是线程安全的,但JavaWebService上的方法也是线程安全的。因此,明智的使用模式(至少对于Metro来说是这样的-线程安全性由于特定的规范欠缺而特定于实现)是重用JavaWebService,因为您只会产生一次昂贵的getSomePort()调用。

更新

这与来自Oracle德国员工的Andreas Leow的两篇帖子相吻合,这是@PapaLazarou在下面的评论中引用的帖子中的发帖者之一,他写了有关Service对象的信息,



关于端口的使用,

07-24 18:56