webservice记录


java 和c++通信的方式之一webservice

用gsoap编译头文件,如果要多线程一定要在转线程的时候用对象的拷贝构造函数重新构造一个对象,不然会出错

头文件:

//gsoap ns service name: Model
//gsoap ns service style: rpc
//gsoap ns service encoding: encoded
//gsoap ns service namespace: http://Model.local
//gsoap ns service location: http://127.0.0.1:10087/service.asmx


//gsoap ns schema namespace: urn:Model






//创建一个文件
int ns__CreateAFile(std::string* responseData);

自动生成代码的bat:

soapcpp2 -S -i -pmodel -x model.h


pause;

--------------------------------------------------------

调用service的工程

#ifndef MODEL_SERVER_H
#define MODEL_SERVER_H
#include "./soap/modelModelService.h"
#include "iostream"
using namespace std;
class ServerFileCreate:public ModelService
{
public:
ServerFileCreate();
~ServerFileCreate();
virtual int CreateAFile(std::string *responseData)  ;
private:




};
#endif

--------

#include "modelserver.h"
ServerFileCreate::ServerFileCreate()
{
}
ServerFileCreate::~ServerFileCreate()
{


}
int ServerFileCreate::CreateAFile(std::string *responseData) 
{
cout<<"hello"<<endl;
*responseData =   " is running!";
return SOAP_OK;
}





---------------------------------------------------------------调度代码-------------

#ifndef SERVER_MANGER_H
#define SERVER_MANGER_H
#include "modelserver.h"
#include <Windows.h>
class ServerManger
{
public:
ServerManger();
~ServerManger();
int webservice_single_thread();
int callser();
//DWORD WINAPI Thread1(LPVOID lpParmeter)  
static unsigned int __stdcall ExcuteServe(void * lpParmeter);
protected:
private:
ServerFileCreate m_serverFileCreate;
};






#endif 




--------------

#include "servicemanger.h"
#include <process.h>
ServerManger::ServerManger()
{


}
ServerManger::~ServerManger()
{


}
unsigned ServerManger::ExcuteServe(void * lpParmeter)
{
ServerManger * AServerManger = (ServerManger*)lpParmeter;
AServerManger->callser();
//cout<<"hello"<<endl;
return 0;
}
int ServerManger::callser()
{
ServerFileCreate * pserv = new ServerFileCreate(m_serverFileCreate);
if (-1==pserv->serve( ))
{
return -1;
}
return 0;
}
int ServerManger::webservice_single_thread()
{


cout<<"begin bind"<<endl;
if (-1==m_serverFileCreate.bind(NULL, 10087, 5))
{
return -1;
}
while (1)
{
cout<<"begin accept"<<endl;
if (-1==m_serverFileCreate.accept( ))
{
return -1;
}
///创建一个线程执行
{
//HANDLE hand = CreateThread(0, 0, ThreadFunc, &a, 0, &id);  
//等待线程完成以后再走后面的程序,INFINITE就是无限等待。
   //WaitForSingleobject(hand, INFINITE);
//m_threadhanlde = (HANDLE)_beginthreadex(NULL,0,ABridge,this,0,&threadid);

HANDLE threadhanlde= (HANDLE)_beginthreadex(NULL,0,ExcuteServe,this,0,NULL);  
 
if (threadhanlde ==  NULL)
{
//创建线程失败
return -1;
}

}
// if (-1==m_serverFileCreate.serve( ))
// {
// return -1;
// }


}

return 0;
}


---main.cpp

#include "servicemanger.h"
int main()
{
  ServerManger serverManger;
serverManger.webservice_single_thread();


  return 0;
}

-----------------------------------

C++   写好webservice服务器供 JAVA调用,这个时候调不通。报错

#define SOAP_GET_METHOD 15

而你用soupui来调用,却可以调的通,这时候有可能是java版本和C用的Gsoup版本不通导致,C的版本很老,JAVa版本教新。

比如java是 axis高版本或者  cxf,可以换成教老的axis1.4 也许能解决问题

------------------------------------------------------------------------------------------------ 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值