1

我们正在开发一个项目,其中我们使用 CXF 框架提供的 JaxWSProxyFactoryBean 来调用 Web 服务。我正在使用 SPRING 配置来创建客户端,而不是直接在代码中使用 API。我还设置了维护会话属性以确保会话由 WS 客户端维护。

<jaxws:client id="userAuthenticationServiceClient1" address="${application.deployment.url}/UserAuthentication" serviceClass="com.authentication.webservice.IUserAuthenticationService" abstract="true" > <jaxws:properties > <entry key=" javax.xml.ws.session.maintain"> <value type="java.lang.Boolean">true</value> </entry> </jaxws:properties> </jaxws:client>

但我发现会话没有跨各种 web 服务实例维护。为了更清楚如果有像wc1,wc2,wc3这样的代理客户端。在 wc1 上调用的所有操作都将具有其会话,而 wc2 将创建新会话。有人可以让我知道我需要做哪些设置才能让所有 ws 客户端共享会话吗?

4

1 回答 1

2

确实没有“自动”的方法来做到这一点。每个服务代理都设计为与其他服务完全分开。但是,您可以通过以下方式“手动”将会话 cookie 从一个代理复制到另一个代理:

HTTPConduit conduit1 = (HTTPConduit)ClientProxy.getClient(p1).getConduit(); HTTPConduit conduit2 = (HTTPConduit)ClientProxy.getClient(p2).getConduit(); conduit2.getCookies().putAll(conduit1.getCookies());

那应该将所有cookie从一个复制到另一个。

于 2009-11-16T13:12:33.070 回答