您是否知道创建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
对象的信息,
关于端口的使用,