加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

webservice记录

发布时间:2020-12-16 22:36:46 所属栏目:安全 来源:网络整理
导读:java 和c++通信的方式之一webservice 用gsoap编译头文件,如果要多线程一定要在转线程的时候用对象的拷贝构造函数重新构造一个对象,不然会出错 头文件: //gsoap ns service name: Model //gsoap ns service style: rpc //gsoap ns service encoding: encod


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,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 也许能解决问题

------------------------------------------------------------------------------------------------?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读