关于使用C++调用WCF的方法
因为近期要对接别人的接口,使用的是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的方法的更多相关文章
- 异步调用WCF的方法需要小心的地方
直接使用下面的代码,由于client对象占用的资源没有被释放,会导致内存泄露GetSimServiceReference.GetSimServiceClient client = new GetSim ...
- 学习调用WCF服务的各种方法
1.开发工具调用WCF 这中方法很方便也很简单,很多工作VS就帮我们完成了.相信大家也不会对这种方法陌生.这里简单提一下.打开VS,在项目中添加服务引用: 在config中自动声明了有关服务的节点信息 ...
- [转]学习 WCF (6)--学习调用WCF服务的各种方法
转自:http://www.cnblogs.com/gaoweipeng/archive/2009/07/26/1528263.html 作者这篇博文写得很全面. 根据不同的情况,我们可以用不同的方法 ...
- POST调用WCF方法-项目实践
做即时通信项目时,需要与OA系统对接接口,主要目标是实现在OA里进行一项事项,通过调用我们的接口,即时通知过来,并弹出消息框提示一下.我们的即时通信使用的WCF服务进行通信,在客户端调用通信时,用的就 ...
- SharePoint 2013 调用WCF服务简单示例
内容比较简单,主要记录自己使用SharePoint 2013WCF服务遇到的小问题和小经验,分享给大家,希望能够给需要的人有所帮助.好吧,进入正题! 第一部分 SharePoint 2013调用自带W ...
- c# 动态调用WCF方法笔记!
//动态调用wcf方法 string url = "http://localhost:54379/ServiceWCF.svc"; IDoubleService proxy = W ...
- 实现jquery.ajax及原生的XMLHttpRequest跨域调用WCF服务的方法
关于ajax跨域调用WCF服务的方法很多,经过我反复的代码测试,认为如下方法是最为简便的,当然也不能说别人的方法是错误的,下面就来上代码,WCF服务定义还是延用上次的,如: namespace Wcf ...
- 实现jquery.ajax及原生的XMLHttpRequest调用WCF服务的方法
废话不多说,直接讲解实现步骤 一.首先我们需定义支持WEB HTTP方法调用的WCF服务契约及实现服务契约类(重点关注各attribute),代码如下: //IAddService.cs namesp ...
- 学习之路十四:客户端调用WCF服务的几种方法小议
最近项目中接触了一点WCF的知识,也就是怎么调用WCF服务,上网查了一些资料,很快就搞出来,可是不符合头的要求,主要有以下几个方面: ①WCF的地址会变动,地址虽变,但是里面的逻辑不变! ②不要引用W ...
- jquery或者JavaScript调用WCF服务的方法
/****************************************************************** * Copyright (C): 一心堂集团 * CLR版本: ...
随机推荐
- ArcObjects SDK开发 022 开发框架搭建-FrameWorkUI包设计
1.CommandUIs部分 这部分主要是定义承载Command和Tool的具体UI.如下图所示. 以CommandUI结尾的这几个类都是继承了Framework.Engine里面的ICommandU ...
- [论文总结] Genecology and Adaptation of Forest Trees 林木的基因生态学与适应性
文章目录 介绍 进化的力量 基因学方法 种源试验 短期基因检测实验 表型与遗传估计 差异化 基因学趋势 预测对气候变化的反应 介绍 基因生态学是研究种内遗传变异与环境条件的关系.它揭示了种群适应环境的 ...
- python进阶之路7 数据类型的内置方法
内容回顾 while 循环补充说明 1.死循环 2.while循环嵌套和全局标志位 for循环 1.for 变量名 in 待遍历数据 for循环体代码 2.for 也可以与break continue ...
- CSS中知
1CSS特性 1.3优先级 1.4权重叠加计算 2Chrome调试工具 2.1查错流程 3CSS盒子模型 3.1内容的宽度和高度 3.2边框(border)-连写形式 ...
- mysql常用命令,检查数据库连接情况以及修改时区
常用操作 注:也可以运行 mysql -u 用户名(root) -p 密码(root) 数据库名(bank) ,然后回车 导入文件:source e:bank.sql (你的sql文件) 回车 PS ...
- MySQL之字段约束条件
MySQL之字段约束条件 一.MySQL之字段约束条件 1.unsigned 无符号 unsigned 为非负数,可以用此类增加数据长度 eg:tinyint最大是127,那tinyint unsig ...
- Java 进阶P-4.4+P-4.5
子类和父类的关系 在java中规定:一个父类可以有多个子类,但是一个子类只能有一个父类.子类可以通过extends关键字来继承父类.做个比较通俗的比喻,就像一个父亲可以有多个亲孩子,但是一个孩子只能有 ...
- sync/atomic 原子操作使用与解析
目录 前言 1. 引入 2. sync.atomic 原子操作 2.1 什么是原子操作 2.2 各种 API 的作用 2.2.1 Store 操作 2.2.2 Load 操作 2.2.3 Add 操作 ...
- 看完这篇你不能再说不懂SSO原理了!
这一篇是原理篇,接下来还会有一篇实战篇,实战的相关代码是非常火的一个开源项目叫:xxl-sso 一.简介 单点登录(Single Sign On),简称为 SSO. 它的解释是在多个应用系统中,用户只 ...
- ECharts 饼图数据放在饼图内部显示
1.业务需求 将数据显示在饼图内部,格式化百分比显示,鼠标放上去显示具体名称和数值 原样式如下 2.业务实现 调整代码如下,核心语句已标记注释 option = { title: { text: 'R ...