java(客户端)调用 gSOAP发布的C++函数(服务器端)
-
服务器端
-
创建将要发布的c++头文件(calc.h)
-
//gsoap ns service name: calc
//gsoap ns service style: rpc
//gsoap ns service encoding:encoded
//gsoap ns service namespace: http://localhost/calc.wsdl
//gsoap ns service location: http://localhost/calc.cgi
//gsoap ns schema namespace: urn:calc
int ns__add(double num1,double num2,double* sum ); -
注意:
-
service name:提供的服务名称
-
service style:Web Service绑定类型,对应于wsdl中的
<binding name="calc" type="tns:calcPortType">
<SOAP:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
<operation name="add">
<SOAP:operation style="rpc" soapAction=""/>
<input>
<SOAP:body parts="parameters" use="literal" namespace="urn:calc"/>
</input>
<output>
<SOAP:body parts="parameters" use="literal" namespace="urn:calc"/>
</output>
</operation>
</binding> -
service encoding:编码格式,对应于wsdl中的<?xml version="1.0" encoding="UTF-8"?>
-
service namespace:命名空间,对应于wsdl中的targetNamespace和xmlns:tns的值
targetNamespace="http://localhost/add.wsdl"
xmlns:tns="http://localhost/add.wsdl" -
service location:服务定位
<service name="calc">
<documentation>gSOAP 2.7.6c generated service definition</documentation>
<port name="calc" binding="tns:calc">
<SOAP:address location="http://localhost/calc.cgi"/>
</port>
</service> -
schema namespace:
-
-
-
通过头文件生成相应的文件
-
通过vc++ 6.0编译代码
-
创建项目(wt_pro_proj)
-
将刚才生成的文件以及gsoap_win32_2.7.6c.zip中的stdsoap2.h和stdsoap2.cpp拷贝至此项目的根目录下:
-
将图示中的文件添加至项目中:
-
添加wsock32.lib至项目中:
-
soapC.cpp、soapServer.cpp、stdsoap2.cpp不使用预编译
-
创建头文件(calc.h)的实现源文件calcServer.cpp
-
#include "calc.h"
#include "calc.nsmap"int main(int argc, char* argv[])
{
int m, s; /* master and slave sockets */
struct soap calc_soap;
soap_init(&calc_soap);//soap_set_namespaces(&calc_soap, add_namespaces);
if (argc < 2)
{
printf("usage: %s <server_port> \n", argv[0]);
exit(1);
}
else
{
m = soap_bind(&calc_soap, NULL, atoi(argv[1]), 100);
if (m < 0)
{
soap_print_fault(&calc_soap, stderr);
exit(-1);
}
fprintf(stderr, "Socket connection successful: master socket = %d\n", m);
for ( ; ; )
{
s = soap_accept(&calc_soap);
if (s < 0)
{
soap_print_fault(&calc_soap, stderr);
exit(-1);
}
fprintf(stderr, "Socket connection successful: slave socket = %d\n", s);
soap_serve(&calc_soap);//该句说明该server的服务
soap_end(&calc_soap);
}
}
return 0;
}
//server端的实现函数与add.h中声明的函数相同,但是多了一个当前的soap连接的参数
int ns__add(struct soap *calc_soap, double num1, double num2, double *sum)
{
*sum = num1 + num2;
return 0;
}
-
-
编译成功后,将在此项目的Debug目录下生成一个以项目名称命名的可执行文件(wt_pro_proj.exe)
-
通过在命令行中执行wt_pro_proj.exe 9000,发布c++的服务。注意9000为端口号,您可以指定任意没有被使用的端口号。
-
- 测试,在浏览器中输入http://localhost:9000
-
-
-
客户端
-
-
1
-
1
-