热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

gSoap客户端调用Webservice服务的问题,如何保持长连接?

gSoap客户端通过SoapBindingProxy调用webservice服务端的时候,跟踪代码发现每次调用完一个接口后,都要调用soap_closesock(soap),有没有方法不soap_c
gSoap客户端通过SoapBindingProxy调用 webservice服务端的时候,跟踪代码发现每次调用完一个接口后,都要调用soap_closesock(soap),有没有方法不soap_closesock(soap),也就是保持长连接状态。

14 个解决方案

#1


受http协议限制,所以就是这样子了。

#2


这个就比较麻烦了,我的服务程序是用Java封装的有状态Bean,连接后需要维持一个登录状态,才能获取到数据,否则是获取不到数据的,这样做也是为了减少服务器的开销。
我用delphi开发的webservice可以正常调用数据。

但是换成MFC的gSoap就成了这个样子。

#3


实在不行的最后方法就是调用 delphi封装的DLL来获取数据。不过目前不想用这个方法!!!
既然有的gSoap,总得研究明白。

#4


又跟踪下服务器代码,感觉gSoap每次连接的时候把一些东西给清空了,导致服务器端无法根据这部分信息来获取这个有状态Bean。

Delphi的Soap客户端可以。Java的Soap客户端也可以。
.Net还没有测试,估计应该也可以。

看来gSoap存在缺陷。(比较致命)

#5


19.11  TCP and HTTP Keep-Alive

gSOAP supports keep-alive socket connections. To activate keep-alive support, set the SOAP_IO_KEEPALIVE flag for both input and output modes, see Section 9.12. For example 

struct soap soap; 
soap_init2(&soap, SOAP_IO_KEEPALIVE, SOAP_IO_KEEPALIVE); 

#6


引用 5 楼 masterz 的回复:
19.11  TCP and HTTP Keep-Alive

gSOAP supports keep-alive socket connections. To activate keep-alive support, set the SOAP_IO_KEEPALIVE flag for both input and output modes, see Section 9.12. For e……

学习下!

#7


19.11 TCP and HTTP Keep-Alive

 

#8


回复5楼,我测试了,还是不行,之前我把各种输入、出的模式都测试过。
void CTestWebserviceDlg::OnButton3() 
{
std::wstring str;
int i1=11;
int &i=mm;
std::wstring usr;

struct ns14__userLoginResponse _param_2;
ExpressLoginControlSoapBindingProxy Pgs("http://192.168.1.51:8080/");
Pgs.ExpressLoginControlSoapBindingProxy_init(SOAP_IO_KEEPALIVE,SOAP_IO_KEEPALIVE);
try{
CString s3;
Pgs.userLogin(DecodeUtf8("00003_BSWH"),DecodeUtf8("123456"),_param_2);//需要靠这个登陆维持session状态
CString ll;
int back=Pgs.getAllAccountCount(i);
CString str2;
str2.Format("%d",i);
MessageBox("getAllAccountCount:"+str2);
//delete Pgs;
}
catch(...){
MessageBox("连接失败");
}

}
代码如上。
就象我之前说的感觉是一些session里的东西给清了,导致的服务器不识别这个session了。

#9


19.28  Client-Side COOKIE Support

Client-side COOKIE support is optional. To enable COOKIE support, compile all sources with option -DWITH_COOKIES, for example: 

> c++ -DWITH_COOKIES -o myclient stdsoap2.cpp soapC.cpp soapClient.cpp

or add the following line to stdsoap.h: 

#define WITH_COOKIES

Client-side COOKIE support is fully automatic. So just (re)compile stdsoap2.cpp with -DWITH_COOKIES to enable COOKIE-based session control in your client.
A database of COOKIEs is kept and returned to the appropriate servers. COOKIEs are not automatically saved to a file by a client. An example COOKIE file manager is included as an extras in the distribution. You should explicitly remove all COOKIEs before terminating a gSOAP context by calling soap_free_COOKIEs(soap) or by calling soap_done(soap).
To avoid "COOKIE storms" caused by malicious servers that return an unreasonable amount of COOKIEs, gSOAP clients/servers are restricted to a database size that the user can limit (32 COOKIEs by default), for example: 

struct soap soap; 
soap_init(&soap); 
soap.COOKIE_max = 10;

#10


请问楼主解决了吗? 给个答案,我也有这方面的问题。。。感谢。

#11


to 10楼
我的方法就是不用 gSoap了,用delphi封装了一下。绝对好用!!!

#12


我按照9楼的方法试验了,增加了一个宏在stdsoap2.h中,然后重新编译运行我的程序,依然不行。
下边是测试代码:
void CTestWebserviceDlg::OnButton3() 
{
std::wstring str;
int i1=11;
        std::wstring usr;
struct ns14__userLoginResponse _param_2;
ExpressLoginControlSoapBindingProxy Pgs("http://127.0.0.1:8085/lcws/services/ExpressLoginControl",SOAP_IO_KEEPALIVE);
Pgs.COOKIE_max=10;
try{
CString s3;
Pgs.userLogin(DecodeUtf8("BSWH"),DecodeUtf8("123456"),_param_2);
CString ll;
int back=0;
back=Pgs.getAllAccountCount(i1);//正常i应该是返回的数量,现在依然是0
CString str2;
str2.Format("%d",i);
MessageBox("getAllAccountCount:"+str2);
}
catch(...){
MessageBox("连接失败");
}
}

#13


楼主啊,问题解决了么?求联系方式,有问题想请教请教

#14


在*Proxy.h里,构造函数里,soap = soap_new()后面添加
soap_init2( soap, SOAP_IO_KEEPALIVE, SOAP_IO_KEEPALIVE);


soap->send_timeout = 45;
soap->recv_timeout = 45;
soap->connect_timeout = 100;
soap->accept_timeout = 10;

应该可以解决吧?我就是这么做的

推荐阅读
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
  • NotSupportedException无法将类型“System.DateTime”强制转换为类型“System.Object”
    本文介绍了在使用LINQ to Entities时出现的NotSupportedException异常,该异常是由于无法将类型“System.DateTime”强制转换为类型“System.Object”所导致的。同时还介绍了相关的错误信息和解决方法。 ... [详细]
  • Spring框架《一》简介
    Spring框架《一》1.Spring概述1.1简介1.2Spring模板二、IOC容器和Bean1.IOC和DI简介2.三种通过类型获取bean3.给bean的属性赋值3.1依赖 ... [详细]
  • 基于PgpoolII的PostgreSQL集群安装与配置教程
    本文介绍了基于PgpoolII的PostgreSQL集群的安装与配置教程。Pgpool-II是一个位于PostgreSQL服务器和PostgreSQL数据库客户端之间的中间件,提供了连接池、复制、负载均衡、缓存、看门狗、限制链接等功能,可以用于搭建高可用的PostgreSQL集群。文章详细介绍了通过yum安装Pgpool-II的步骤,并提供了相关的官方参考地址。 ... [详细]
  • 搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的详细步骤
    本文详细介绍了搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的步骤,包括环境说明、相关软件下载的地址以及所需的插件下载地址。 ... [详细]
  • ZSI.generate.Wsdl2PythonError: unsupported local simpleType restriction ... [详细]
  • 本文介绍了南邮ctf-web的writeup,包括签到题和md5 collision。在CTF比赛和渗透测试中,可以通过查看源代码、代码注释、页面隐藏元素、超链接和HTTP响应头部来寻找flag或提示信息。利用PHP弱类型,可以发现md5('QNKCDZO')='0e830400451993494058024219903391'和md5('240610708')='0e462097431906509019562988736854'。 ... [详细]
  • 本文介绍了在Linux下安装和配置Kafka的方法,包括安装JDK、下载和解压Kafka、配置Kafka的参数,以及配置Kafka的日志目录、服务器IP和日志存放路径等。同时还提供了单机配置部署的方法和zookeeper地址和端口的配置。通过实操成功的案例,帮助读者快速完成Kafka的安装和配置。 ... [详细]
  • 本文介绍了Python爬虫技术基础篇面向对象高级编程(中)中的多重继承概念。通过继承,子类可以扩展父类的功能。文章以动物类层次的设计为例,讨论了按照不同分类方式设计类层次的复杂性和多重继承的优势。最后给出了哺乳动物和鸟类的设计示例,以及能跑、能飞、宠物类和非宠物类的增加对类数量的影响。 ... [详细]
  • 本文介绍了如何使用Express App提供静态文件,同时提到了一些不需要使用的文件,如package.json和/.ssh/known_hosts,并解释了为什么app.get('*')无法捕获所有请求以及为什么app.use(express.static(__dirname))可能会提供不需要的文件。 ... [详细]
  • Imtryingtofigureoutawaytogeneratetorrentfilesfromabucket,usingtheAWSSDKforGo.我正 ... [详细]
  • 微软评估和规划(MAP)的工具包介绍及应用实验手册
    本文介绍了微软评估和规划(MAP)的工具包,该工具包是一个无代理工具,旨在简化和精简通过网络范围内的自动发现和评估IT基础设施在多个方案规划进程。工具包支持库存和使用用于SQL Server和Windows Server迁移评估,以及评估服务器的信息最广泛使用微软的技术。此外,工具包还提供了服务器虚拟化方案,以帮助识别未被充分利用的资源和硬件需要成功巩固服务器使用微软的Hyper - V技术规格。 ... [详细]
  • 本文详细介绍了在Linux虚拟化部署中进行VLAN配置的方法。首先要确认Linux系统内核是否已经支持VLAN功能,然后配置物理网卡、子网卡和虚拟VLAN网卡的关系。接着介绍了在Linux配置VLAN Trunk的步骤,包括将物理网卡添加到VLAN、检查添加的VLAN虚拟网卡信息以及重启网络服务等。最后,通过验证连通性来确认配置是否成功。 ... [详细]
  • SQL Server 2008 到底需要使用哪些端口?
    SQLServer2008到底需要使用哪些端口?-下面就来介绍下SQLServer2008中使用的端口有哪些:  首先,最常用最常见的就是1433端口。这个是数据库引擎的端口,如果 ... [详细]
author-avatar
繁华落尽的星空
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有