因为近期要对接别人的接口,使用的是wcf,因为之前没有使用过wcf,更不了解它,于是在使用的时候出现了很多问题。

下面就记录一下下

在调用方法之前,我们一般都会拿到一个地址,http://xxxxxxxxxxxxxxxx?wsdl 这样类型的东西

先下载gSOAP工具

以下操作都是在gsoap\bin\win32中操作哦~

  • 打开http://xxxxxxxxxxxxxxxx?wsdl,右键另存为,修改一下下类型,修改为:xxx.wsdl
  • 创建文件(wsmap.dat)注意,这里是dat不是bat,我刚开始就创建错误,后面调用的时候出现点小问题。不要创建错误了
  • wsmap.dat 这个文件里面写:xsd__string = | std::wstring | wchar_t*
  • cmd 切换到gsoap\bin\win32 此目录,然后输入命令
  • wsdl2h.exe -s -t wsmap.dat xxx.wsdl(这里是你上面自己写的名字)
-o 文件名,指定输出头文件
-n 名空间前缀 代替默认的ns
-c 产生纯C代码,否则是C++代码
-s 不要使用STL代码
-t 文件名,指定type map文件,默认为typemap.dat
-e 禁止为enum成员加上名空间前缀
  • 然后再输入下面的命令
  • soapcpp2 -i -C -x -L xxx.h(这里的头文件是上一步生成出来的) -I C:\Users\Administrator\Desktop\WCF\gsoap-2.8\gsoap\import(这里的路径,看你自己的位置)
-C 仅生成客户端代码
-S 仅生成服务器端代码
-L 不要产生soapClientLib.c和soapServerLib.c文件
-c 产生纯C代码,否则是C++代码(与头文件有关)
-I 指定import路径(见上文)
-x 不要产生XML示例文件
-i 生成C++包装,客户端为xxxxProxy.h(.cpp),服务器端为xxxxService.h(.cpp)
  • 这个时候会生成一些东西出来
  • 新建一个工程,然后把这些文件放到工程里面,还有stdsoap2.cpp 和stdsoap2.h 这两个文件在(gsoap)目录下面
  • 将这些文件添加到工程里面

下面是一个demo

#include <stdio.h>
#include <stdlib.h>
#include <fstream>
#include <string >
#include <iostream> #include <iostream>
//包含soap头文件
#include "soapH.h"
#include "soapStub.h" //这里是两个是刚刚生成出来的
#include "xxxx.nsmap"
#include "xxx.h" using namespace std; //定义jsoncpp 支持的对象类型
enum Type
{
nullValue = 0, ///< 'null' value
intValue, ///< signed integer value
uintValue, ///< unsigned integer value
realValue, ///< double value
stringValue, ///< UTF-8 string value
booleanValue, ///< bool value
arrayValue, ///< array value (ordered list)
objectValue ///< object value (collection of name/value pairs).
}; void main() {
//WebService的请求地址
const char* web_url = "http://xxxxxxxx?wsdl"; //soap接口
xxxxxxxxServiceProxy soap(SOAP_C_UTFSTRING); //string tmpCheckStr = j_CheckParam.toStyledString();
string t = "{\n\t\"Mac\" : \"00:00:00:00:00:00\"\n}\n";
wchar_t* TempParam = new wchar_t[t.size()];
swprintf(TempParam, t.size(), L"%S", t.c_str()); //输入 _ns1__CheckUOP
_ns1__CheckUOP m_ns1_Check;
m_ns1_Check.param = TempParam; //我这里是wchat*的类型,需要视情况而定 //输出 _ns1__CheckUOPResponse
_ns1__CheckUOPResponse m_ns1_CheckResponse; int iCheckRe = soap.CheckUOP(web_url, NULL, &m_ns1_Check, m_ns1_CheckResponse);
wchar_t* aos = m_ns1_CheckResponse.CheckUOPResult;
if (iCheckRe == SOAP_OK) {
printf("s");
}
printf("aos:%c\n",aos);
getchar();
return;
}

最新文章

  1. shell编程之流程控制
  2. Winform以任意角度旋转PictureBox中的图片的方法
  3. Java Programming Test Question 3
  4. Spring MVC笔记 使用JdbcTemplate
  5. 远程连接Kali Linux使用PuTTY实现SSH远程连接
  6. Android消息机制(1)
  7. Three Swaps DFS
  8. 打印pid,写着玩。
  9. mysql关闭/启用外键约束
  10. 腾讯Java程序员第二轮面试11个问题,你会几个?
  11. mysql最佳优化经验
  12. AngularJS进阶(十五)Cookie &#39;data&#39; possibly not set or overflowed because it was too large
  13. 基于服务器的AAA配置实验(Cisco PT)
  14. Codeforces1062D. Fun with Integers(埃氏筛)
  15. hosts.allow和hosts.deny支持哪些服务
  16. HDUOJ---2082
  17. 如何才能知道外线是FSK还是DTMF制式?
  18. C++课堂作业(2)
  19. 虚拟机Centos设置静态IP
  20. windows windows server2003 开机自动挂盘

热门文章

  1. day09-功能实现08
  2. Spark详解(09) - Spark调优
  3. 蚂蚁感冒【第五届蓝桥杯省赛C++A/B组】
  4. SSM框架——整合ssm
  5. LRU 居然翻译成最近最少使用?真相原来是这样!
  6. 构建api gateway之 http路由实现
  7. Python解释器下载与安装
  8. P6327 区间加区间sin和 题解
  9. python学习day 02
  10. P12_小程序API的3大分类