因为近期要对接别人的接口,使用的是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;
}

关于使用C++调用WCF的方法的更多相关文章

  1. 异步调用WCF的方法需要小心的地方

    直接使用下面的代码,由于client对象占用的资源没有被释放,会导致内存泄露GetSimServiceReference.GetSimServiceClient client = new GetSim ...

  2. 学习调用WCF服务的各种方法

    1.开发工具调用WCF 这中方法很方便也很简单,很多工作VS就帮我们完成了.相信大家也不会对这种方法陌生.这里简单提一下.打开VS,在项目中添加服务引用: 在config中自动声明了有关服务的节点信息 ...

  3. [转]学习 WCF (6)--学习调用WCF服务的各种方法

    转自:http://www.cnblogs.com/gaoweipeng/archive/2009/07/26/1528263.html 作者这篇博文写得很全面. 根据不同的情况,我们可以用不同的方法 ...

  4. POST调用WCF方法-项目实践

    做即时通信项目时,需要与OA系统对接接口,主要目标是实现在OA里进行一项事项,通过调用我们的接口,即时通知过来,并弹出消息框提示一下.我们的即时通信使用的WCF服务进行通信,在客户端调用通信时,用的就 ...

  5. SharePoint 2013 调用WCF服务简单示例

    内容比较简单,主要记录自己使用SharePoint 2013WCF服务遇到的小问题和小经验,分享给大家,希望能够给需要的人有所帮助.好吧,进入正题! 第一部分 SharePoint 2013调用自带W ...

  6. c# 动态调用WCF方法笔记!

    //动态调用wcf方法 string url = "http://localhost:54379/ServiceWCF.svc"; IDoubleService proxy = W ...

  7. 实现jquery.ajax及原生的XMLHttpRequest跨域调用WCF服务的方法

    关于ajax跨域调用WCF服务的方法很多,经过我反复的代码测试,认为如下方法是最为简便的,当然也不能说别人的方法是错误的,下面就来上代码,WCF服务定义还是延用上次的,如: namespace Wcf ...

  8. 实现jquery.ajax及原生的XMLHttpRequest调用WCF服务的方法

    废话不多说,直接讲解实现步骤 一.首先我们需定义支持WEB HTTP方法调用的WCF服务契约及实现服务契约类(重点关注各attribute),代码如下: //IAddService.cs namesp ...

  9. 学习之路十四:客户端调用WCF服务的几种方法小议

    最近项目中接触了一点WCF的知识,也就是怎么调用WCF服务,上网查了一些资料,很快就搞出来,可是不符合头的要求,主要有以下几个方面: ①WCF的地址会变动,地址虽变,但是里面的逻辑不变! ②不要引用W ...

  10. jquery或者JavaScript调用WCF服务的方法

    /****************************************************************** * Copyright (C): 一心堂集团 * CLR版本: ...

随机推荐

  1. ArcObjects SDK开发 022 开发框架搭建-FrameWorkUI包设计

    1.CommandUIs部分 这部分主要是定义承载Command和Tool的具体UI.如下图所示. 以CommandUI结尾的这几个类都是继承了Framework.Engine里面的ICommandU ...

  2. [论文总结] Genecology and Adaptation of Forest Trees 林木的基因生态学与适应性

    文章目录 介绍 进化的力量 基因学方法 种源试验 短期基因检测实验 表型与遗传估计 差异化 基因学趋势 预测对气候变化的反应 介绍 基因生态学是研究种内遗传变异与环境条件的关系.它揭示了种群适应环境的 ...

  3. python进阶之路7 数据类型的内置方法

    内容回顾 while 循环补充说明 1.死循环 2.while循环嵌套和全局标志位 for循环 1.for 变量名 in 待遍历数据 for循环体代码 2.for 也可以与break continue ...

  4. CSS中知

    1CSS特性    1.3优先级    1.4权重叠加计算 2Chrome调试工具     2.1查错流程 3CSS盒子模型    3.1内容的宽度和高度    3.2边框(border)-连写形式 ...

  5. mysql常用命令,检查数据库连接情况以及修改时区

    常用操作 注:也可以运行 mysql -u 用户名(root) -p 密码(root) 数据库名(bank) ,然后回车 导入文件:source e:bank.sql (你的sql文件) 回车 PS ...

  6. MySQL之字段约束条件

    MySQL之字段约束条件 一.MySQL之字段约束条件 1.unsigned 无符号 unsigned 为非负数,可以用此类增加数据长度 eg:tinyint最大是127,那tinyint unsig ...

  7. Java 进阶P-4.4+P-4.5

    子类和父类的关系 在java中规定:一个父类可以有多个子类,但是一个子类只能有一个父类.子类可以通过extends关键字来继承父类.做个比较通俗的比喻,就像一个父亲可以有多个亲孩子,但是一个孩子只能有 ...

  8. sync/atomic 原子操作使用与解析

    目录 前言 1. 引入 2. sync.atomic 原子操作 2.1 什么是原子操作 2.2 各种 API 的作用 2.2.1 Store 操作 2.2.2 Load 操作 2.2.3 Add 操作 ...

  9. 看完这篇你不能再说不懂SSO原理了!

    这一篇是原理篇,接下来还会有一篇实战篇,实战的相关代码是非常火的一个开源项目叫:xxl-sso 一.简介 单点登录(Single Sign On),简称为 SSO. 它的解释是在多个应用系统中,用户只 ...

  10. ECharts 饼图数据放在饼图内部显示

    1.业务需求 将数据显示在饼图内部,格式化百分比显示,鼠标放上去显示具体名称和数值 原样式如下 2.业务实现 调整代码如下,核心语句已标记注释 option = { title: { text: 'R ...