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 编写)进行段错误

工作笔记c++使用gsoap调用webservice

C语言中怎样输出自定义函数的输出

c语言中,在一个自定义函数里面只能调用一个自定义函数吗?可以调用多个吗?如果可以怎么调用?

WebServic调用天气预报服务

c语言中怎么调用自定义函数