C语言通过gSoap调用自定义的Webservice发布的服务(未实现动态调用,手动输入调用)
Posted 江州益彤
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言通过gSoap调用自定义的Webservice发布的服务(未实现动态调用,手动输入调用)相关的知识,希望对你有一定的参考价值。
一、创建webservice服务,并发布服务
二、浏览器地址栏输入自定义的webservice服务地址:http://localhost:8989/cToJava?wsdl
选择“另存为”到win32目录下,直接把文件名后缀改成.wsdl,如下:
三、创建wsmap.dat支持中文
在win32目录下新建一个文件”wsmap.dat“,文件内容为xsd__string = | std::wstring | wchar_t*;那么SOAP/XML中的string将转换成std::wstrin或wchar_t*,这样能更好地支持中文。
四、生成CToJava.h头文件
在该目录下打开cmd窗口,输入以下命令。回车后生成WeatherWS.h头文件
wsdl2h -s -t wsmap.dat cToJava.wsdl
五、解析WeatherWS.h,生成存根程序
在该目录下打开cmd窗口,输入以下命令。
soapcpp2 -i -C -x -L cToJava.h -I C:\\Users\\Administrator\\Desktop\\gsoap_2.8.117\\gsoap-2.8\\gsoap\\import
C:\\Users\\Administrator\\Desktop\\gsoap_2.8.117\\gsoap-2.8\\gsoap\\import是我自己的文件目录,参考者自行修改
运行上面命令,将生成下面六个文件
六、打开Visual Studio 2017,在里面新建一个空项目。
我在这里命名为“TestOwerCToJava”。
其中的stdsoap2.h和stdsoap2.cpp在gsoap_2.8.100\\gsoap-2.8\\gsoap目录下,cToJavaClinet.cpp是自己新建的测试类,名字任意。
七、创建测试类
WebService的具体调用方式可以参见生成的soapStub.h文件。
cToJavaClinet.cpp内容如下:
#include "soapH.h"
#include "CToJavaPortBinding.nsmap"
#include<stdio.h>
#include"soapCToJavaPortBindingProxy.h"
#include <stdlib.h>
#include <fstream>
#include <string >
#include <iostream>
using namespace std;
int main()
//WebService的请求地址
const char* web_url = "http://localhost:8989/cToJava?wsdl";
//soap接口
CToJavaPortBindingProxy soap(SOAP_C_UTFSTRING);
//构造输入参数
ns1__getMessage getMessage;
getMessage.arg0 = L"1234567";//值的前面一定一定要带”L“
//输出参数
ns1__getMessageResponse getMessageResponse;
int xlt = soap.getMessage(web_url, NULL, &getMessage, getMessageResponse);
printf("xlt==%d\\n",xlt);
if (xlt == SOAP_OK)
printf("连接服务端成功\\n");
// 获取返回结果
int len = getMessageResponse.__sizereturn_;
printf("len==%d\\n",len);
for (int i = 0; i < len; i++)
std::wstring a = getMessageResponse.return_[i];
wcout.imbue(locale("chs"));
wcout << a.c_str() << endl;
else
printf("连接服务端失败\\n");
getchar();
return 0;
八、解决报错
右击项目“属性”->c/c+±>语言->符合模式,改成否。如下图:
九、运行打印结果:
服务端接收客户端的请求
以上是关于C语言通过gSoap调用自定义的Webservice发布的服务(未实现动态调用,手动输入调用)的主要内容,如果未能解决你的问题,请参考以下文章
gsoap 在我每第二次调用时都会对我的应用程序(用 C 编写)进行段错误