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);
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,ThreadFunc,&a,&id);
//等待线程完成以后再走后面的程序,INFINITE就是无限等待。
//WaitForSingleobject(hand,INFINITE);
//m_threadhanlde = (HANDLE)_beginthreadex(NULL,ABridge,this,&threadid);
HANDLE threadhanlde= (HANDLE)_beginthreadex(NULL,ExcuteServe,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 也许能解决问题
------------------------------------------------------------------------------------------------
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。