webservice记录
2015-09-25 10:37
501 查看
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 也许能解决问题
------------------------------------------------------------------------------------------------
用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 也许能解决问题
------------------------------------------------------------------------------------------------
相关文章推荐
- 分析Mysql 5.6的Dockerfile
- [转]MSSQL 判断临时表是否存在
- hdu 1712 (分组背包入门)
- Codeforces573C. Bear and Drawing
- Introduction to neural network —— 该“神经网络” 下拉“祭坛”
- PHP官方Windows扩展资源索引
- binbinyang---使用Genymotion调试出现错误INSTALL_FAILED_CPU_ABI_INCOMPATI
- 销售行业ERP数据统计分析都有哪些维度?
- css文档集
- C#连接MySql
- 销售行业ERP数据统计分析都有哪些维度?
- MySQL AVG()函数
- CSS-3 Transform 的使用
- 移动应用丰富动效的六点原则
- 开放数据库互连(Open Database Connectivity,ODBC) 与PDO 事务的四个特征 XSS
- simHash
- IOS9 适配
- leetcode 179:Largest Rectangle in Histogram 两种算法
- org.springframework.web.multipart.commons.CommonsMultipartFile异常
- 第三次作业