gsoap搭建webservice

1.gsoap工具下载地址;

http://sourceforge.net/projects/gsoap2/files/

2.新建win32控制台工程webservice,新建webservice/interface目录;

3.新建接口头文件interface/interface.h,根据需要声明接口函数;

//gsoap ns service name: interface
//gsoap ns service namespace: http://localhost/interface.wsdl
//gsoap ns service location: http://localhost
//gsoap ns service executable: interface.cgi
//gsoap ns service encoding: encoded
//gsoap ns schema namespace: urn:interface
 
int ns__add(int nNumber1, int nNumber2, int* nOutputNumber);

4.命令行进入webservice/interface目录,执行bin/soapcpp2.exe interface.h,生成以下文件;

 

5.将stdsoap2.hstdsoap2.cpp拷贝到webservice目录下,并引入工程(预编译头选项->”否”);

6.新增Realization.hRealization.cpp用以声明和实现interface.h中的函数,放在webservice目录下;

#pragma once
 
// 说明:server端的实现函数与interface.h中声明的函数相同,但是多了一个当前的soap连接的参数
 
int ns__add(struct soap *stSoap, int nNumber1, int nNumber2, int *nOutputNumber);

#include "Realization.h"
 
int ns__add(struct soap *stSoap, int nNumber1, int nNumber2, int *nOutputNumber)
{
*nOutputNumber = nNumber1 + nNumber2;
return 0;
}

7.将interface/soapH.hinterface/soapStub.hinterface/soapC.cppinterface/soapServer.cpp引入工程(预编译头选项->”否”);

8.新增webservice/stringEx.h,用以字符串转换;

#ifndef _STRINGEX_H
#define _STRINGEX_H
 
#include <stdlib.h>
 
/* 
*********************************************************************** 
* 函数:THCAR2Char 
* 描述:将TCHAR* 转换为char* 
* 日期:-05-30
*********************************************************************** 
*/
char* THCAR2char(TCHAR* tchStr)
{
int iLen = 2 * wcslen(tchStr);	 // CString,TCHAR汉字算一个字符,因此不用普通计算长度
char* chRtn = new char[iLen + 1];
wcstombs(chRtn, tchStr, iLen + 1);	// 转换成功返回为非负值
return chRtn; 
}
#endif


9.编写tmain主线程入口函数;

// webservice.cpp : 定义控制台应用程序的入口点。
//
 
#include "stdafx.h"
#include "stringEx.h"
#include "Realization.h"
#include "interface/interface.h"
#include "interface/interface.nsmap"
 
int _tmain(int argc, _TCHAR* argv[])
{
int nMasterSocket = INVALID_SOCKET;
int nSlaveSocket  = INVALID_SOCKET;
 
struct soap stSoap;
soap_init(&stSoap);
if (argc < 2)
{
std::cout << "usage:" << argv[0] << "<server port>." << std::endl;
return 0;
}
char *pszPort = THCAR2char(argv[1]);
nMasterSocket = soap_bind(&stSoap, NULL, atoi(pszPort), 100);
delete []pszPort;
pszPort = NULL;
 
if (nMasterSocket < 0)
{
soap_print_fault(&stSoap, stderr);
return 0;
}
 
std::cout << "Socket connection successful.Master socket = " << nMasterSocket << std::endl;
 
while (true)
{
nSlaveSocket = soap_accept(&stSoap);
if (nSlaveSocket < 0)
{
soap_print_fault(&stSoap, stderr);
return 0;
}
// 该句说明该server的服务
soap_serve(&stSoap);
soap_end(&stSoap);
}
 
system("pause");
return 0;
}

10.调试运行(带端口参数:如8101),在IE中输入http://localhost:8101如果显示XML页面,说明程序已经启动。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值