Web服务客户端创建方法

时间:2014-08-30 18:44:38

标签: java web-services jax-ws rpc

我正在使用以下方法来创建Web服务客户端。在创建如下所示的存根实例之后,我可能想知道客户端和服务器之间是否建立了连接。 否则在调用远程方法调用(例如stub.xxxmethod()myervicePort.xxxMetho()

之后建立客户端和服务器之间的连接
RPC/Encoded
stub = new MyWsRPCPortStub(new URL(), new MyWsRPCLocator());
stub.setTimeout(pdbTimeout);

Document/Literal
MyServicePort myervicePort = service.getMyServicePort();

在了解上述问题后,我将决定何时创建存根实例?我的意思是有两种方式:

1-在应用程序中只创建一个存根实例,我的意思是我将使用单例模式

2-每次调用方法调用之前创建存根实例

如果我只使用一个带有多线程应用程序的存根实例,每个线程在调用stub.xxMethod()的同时打开差异套接字怎么办?

同时 T1-> stub.xxMethod() T2-> stub.xxMethod() T3-> stub.xxMethod()

1 个答案:

答案 0 :(得分:1)

首先,您提到的在客户端中使用Web服务的approcahes不依赖于Web服务样式是RPC还是Document Literal。两种样式的客户端都是相同的。这些样式仅确定客户端和服务器之间交换的SOAP消息的结构。一个帖子开始吧: - here

使用通过HTTP运行的SOAP协议在客户端和服务器之间发送消息。因此,客户端和服务器之间的通信应该主要看作普通的HTTP请求/响应模型,而不是建立和维护它们之间的连接的时间和方式,这是底层TCP协议的工作;并且Web服务客户端和底层操作系统中的API完全抽象出我们的这些细节。

但是,如果您想知道Web服务客户端何时发出HTTP请求;您可以使用任何数据包捕获工具(例如'wireshark')跟踪它。通常,如果您只有一个方法的Web服务;当您在Service service = Service.create(url, qname)上使用YourWSInterface.xxxmethod() api和HTTP POST时,通常会发出HTTP GET请求。

关于何时创建存根;在多线程环境中;如果您要在发送到Web服务之前在客户端存根上使用BindingProvider来设置数据(而不仅仅是只读调用);是;您需要在客户端代码中使用一些syhcnronization(使用单个实例)或创建一个客户端代理池(多个池实例);取决于您的应用程序的要求。

我希望我已经回答了这个问题。