gsoap调用webservice出现内存泄漏,该怎么解决

gsoap调用webservice出现内存泄漏,该怎么解决,第1张

gsoap调用webservice出现内存泄漏

程序运行起来后内存一直增长,出现了内存泄漏,经过各模块的测试分析,将泄漏代码出现在这一段。

  /webservice客户端函数,上传本地数据库数据到远程服务器/

int SendToWebService(char data_values,int n_columns,sqlite3 conn)

{

char sql[200]=" ";

char err_msg;

int res;

struct soap clientSoap = soap_new();

SOAP_CMAC _ns1__SendOneMessage sendMsg;

SOAP_CMAC _ns1__SendOneMessageResponse sendMsgResponse;

#if 1

soap_init(clientSoap);

sendMsggrpID=atoi(data_values[0]);

sendMsgcTime=atoi(data_values[1]);

sendMsgallEnCount=atoi(data_values[2]);

sendMsgallOutCount=atoi(data_values[3]);

printf("sendMsggrpID=%d;sendMsgcTime=%d;sendMsgenCount=%d;sendMsgoutCount=%d\n",sendMsggrpID,sendMsgcTime,sendMsgallEnCount,sendMsgallOutCount);

sprintf_s(buffer,sizeof(buffer),"sendMsggrpID=%d;sendMsgcTime=%d;sendMsgenCount=%d;sendMsgoutCount=%d",sendMsggrpID,sendMsgcTime,sendMsgallEnCount,sendMsgallOutCount);

WriteLog(buffer);

struct SOAP_ENV__Header header;

clientSoap->header=&header;

string strid("admin");

string strpsw("123456");

SOAP_CMAC ns1__MySoapHeader mySoapHeader;

mySoapHeaderUserId=&strid;

mySoapHeaderUserPW=&strpsw;

headerns1__MySoapHeader_=&mySoapHeader;

clientSoap->header=&header;

if(soap_call___ns1__SendOneMessage(clientSoap, NULL, NULL, &sendMsg, &sendMsgResponse)==SOAP_OK)

{

//printf("response=%d\n ", sendMsgResponseSendOneMessageResult);

sprintf_s(buffer,sizeof(buffer),"sendMsgResponseSendOneMessageResult=%d",sendMsgResponseSendOneMessageResult);

WriteLog(buffer);

/

-1 =验证失败, -2=失败,1=插入成功,2=更新成功;

插入成功,更新成功写数据库,将数据标为已发送。

失败,返回-1,上传数据线程释放资源

/

switch(sendMsgResponseSendOneMessageResult)

{

case 0:

soap_destroy(clientSoap);

soap_end(clientSoap);

soap_done(clientSoap);

return -1;

break;

case 1:

WriteLog("上传到服务器,数据插入成功");

sprintf_s(sql,sizeof(sql),"Update Grp set IsSend=%d where CTime=%d and GropId=%d",1,atoi(data_values[1]),atoi(data_values[0]));

res=sqlite3_exec(conn, sql, NULL, 0, &err_msg);

if(res!=SQLITE_OK)

{

fprintf(stderr,"操作失败,错误代码:%s",err_msg);

sprintf_s(buffer,sizeof(buffer),"操作失败,错误代码:%s",err_msg);

WriteLog(buffer);

}

else

{

printf("本地数据Issend更新为1成功\n");

WriteLog("本地数据Issend更新为1成功");

}

sqlite3_free(err_msg);

break;

case 2:

WriteLog("上传到服务器,数据更新成功");

sprintf_s(sql,sizeof(sql),"Update Grp set IsSend=%d where CTime=%d and GropId=%d",1,atoi(data_values[1]),atoi(data_values[0]));

res=sqlite3_exec(conn, sql, NULL, 0, &err_msg);

if(res!=SQLITE_OK)

{

fprintf(stderr,"操作失败,错误代码:%s\n",err_msg);

sprintf_s(buffer,sizeof(buffer),"操作失败,错误代码:%s",err_msg);

WriteLog(buffer);

}

else

{

printf("本地数据Issend更新为1成功\n");

WriteLog("本地数据Issend更新为1成功");

}

sqlite3_free(err_msg);

break;

case -1:

WriteLog("-1,连接服务器验证失败");

soap_destroy(clientSoap);

soap_end(clientSoap);

soap_done(clientSoap);

return -1;

break;

case -2:

WriteLog("-2,失败");

soap_destroy(clientSoap);

soap_end(clientSoap);

soap_done(clientSoap);

1、C++可以实现webservice,这是毋庸置疑的axis2本质是运行在tomcat下的一个servlet,分java版本,和C语言版本官方网站为:,首页上写着:

The well known Apache Axis, and the the second generation of it, the Apache Axis2, are two Web Service containers that helps users to create, deploy, and run Web ServicesAxis2 is avaialble in both Java as well as C, languages and details about each version can be found below 大概意思就是这东西分java版本和C版本,可以方便用户创建,部署,运行web service而C++完全是兼容C的

2、需要服务器,要实现某个服务吧,至于怎样为其他平台服务,主要是监听端口实现解析http协议js不需要拼串成XML,服务器才要拼串,JS是运行在客户端的,客户端也不是通过SOAP与服务端进行通讯的,而是根据需要调用的服务的WSDL,提供对应参数,客户端与服务端的通讯是用http协议的,而通讯方式根据是GET还是POST把相关参数放到HTTP头或者体中而web service之间的通讯才可能用得到SOAP

3、PHP调用web service是非常简单的,貌似有个函数通过SOAP调用C++编写的web service肯定有WSDL,可以根据WSDL描述的端口参数,来调用

数值和的平均值。 特别提醒:如果引

1 C++当然可以实现webservice,这是毋庸置疑的axis2你知道吗本质是运行在tomcat下的一个servlet,分java版本,和C语言版本官方网站为:http://axisapacheorg/,首页上写着:

The well known Apache Axis, and the the second generation of it, the Apache Axis2, are two Web Service containers that helps users to create, deploy, and run Web Services

Axis2 is avaialble in both Java as well as C, languages and details about each version can be found below 大概意思就是这东西分java版本和C版本,可以方便用户创建,部署,运行web service而C++完全是兼容C的

2 当然需要服务器,可能要实现某个服务吧,至于怎样为其他平台服务,主要是监听端口实现解析http协议

3 你的问题有问题,js不需要拼串成XML,服务器才要拼串,JS是运行在客户端的,客户端也不是通过SOAP与服务端进行通讯的,而是根据需要调用的服务的WSDL,提供对应参数,客户端与服务端的通讯是用http协议的,而通讯方式根据是GET还是POST把相关参数放到HTTP头或者体中而web service之间的通讯才可能用得到SOAP

4 PHP调用web service是非常简单的,貌似有个函数通过SOAP调用C++编写的web service肯定有WSDL,可以根据WSDL描述的端口参数,来调用

PS1:我没有做过C++的Web service,只做过java的,但是所有语言都是相同的,基本原理都是一样的,另外web service最好的做法是对外隐藏的,不能直接调用,应该有个类似调度中心的存在来负责调用,这是一个设计方式 当然直接调用也是可以的,但这种方式效率不高

PS2:C++可以做web service,但不是很好,缺乏技术支持,软件支持,虽然管道过滤器模型不限制过滤器的实现方式,但怎么说呢,C++就是不适合,毕竟和其他构件存在配合问题,而且开发成本也会相对要高点 现在主流的是C#和JAVA

PHP webservices 的soap的问题,发出的消息包不稳定,与gsoap无关。ndroid真机用wifi和PC 服务器连接的。

android coco2dx22 通过gsoap和服务器的gsoap通信的。

服务器可以收到包。

DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
网站模板库 » gsoap调用webservice出现内存泄漏,该怎么解决

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情