快速业务通道

WebService大讲堂之Axis2(6):跨服务会话(Session)管理 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-15
lass"> service.LoginService </parameter> <messageReceivers> <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out" class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" /> </messageReceivers> </service> <!-- 第2步:添加scope属性,并设置属性值为application --> <service name="searchService" scope="application"> <description> 搜索服务 </description> <parameter name="ServiceClass"> service.SearchService </parameter> <messageReceivers> <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out" class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" /> </messageReceivers> </service> </serviceGroup>

WebService大讲堂之Axis2(6):跨服务会话(Session)管理(3)

时间:2011-08-13 BlogJava 哈佛校训

第3步与《WebService大讲堂之Axis2(5):会话(Session)管理》一文中介绍的方法类似。

下面是使用两个stub类的对象实例访问上面实现的两个WebService的客户端代码:

LoginServiceStub stub = new LoginServiceStub();
LoginServiceStub.Login login = new LoginServiceStub.Login();
login.setUsername("bill");
login.setPassword("1234");
if(stub.login(login).local_return)
{
    System.out.println(stub.getLoginMsg().local_return);
    SearchServiceStub searchStub = new SearchServiceStub();
    SearchServiceStub.FindByName fbn = new SearchServiceStub.FindByName();
    fbn.setName("abc");
    System.out.println(searchStub.findByName(fbn).local_return); 
}

在执行上面的代码后,将输出如下的信息:

成功登录

找到的数据<abc>

读者可以将scope属性值改成transportsession,看看会输出什么!

实际上,Axis2的会话管理也是通过Cookie实现的,与Web应用中的Session管理类似。如果读者使用C# 访问支持会话(在同一个服务中的会话管理)的WebService,需要指定一个CookieContainer对象,代码 如下:

service.loginService ls = new service.loginService(); System.Net.CookieContainer cc = new System.Net.CookieContainer(); ls.CookieContainer = cc; bool r, rs; ls.login("bill", "1234", out @r, out rs); if (r) { MessageBox.Show(ls.getLoginMsg().@return); }

如果是访问跨服务的支持会话的WebService,则不需要指定CookieContainer对象,代码如下:

service.loginService ls = new service.loginService(); bool r, rs; ls.login("bill", "1234", out @r, out rs); if (r) { service1.searchService ss = new service1.searchService(); MessageBox.Show(ss.findByName("abc")); }

如果读者使用delphi(本文使用的是delphi2009,其他的delphi版本请读者自行测试)调用支持会话 的WebService时有一些差别。经笔者测试,使用delphi调用WebService,将scope属性值设为 transportsession和application都可以实现跨服务的会话管理,这一点和Java与C#不同,Java和C#必须 将scope属性值设为application才支持跨服务会话管理。在delphi中不需要象C#指定

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号