因为近期要对接别人的接口,使用的是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. JavaScript:函数:如何声明和调用函数?

    首先,理解什么是函数? 通俗的说,函数就是用大括号括起来的一组JS语句的集合体,是一个代码块,表达一种行为逻辑. 当我们调用函数的时候,我们就是在执行这一组JS语句. 然后,确定一点,在JS中,函数也 ...

  2. vivo 低代码平台【后羿】的探索与实践

    作者:vivo 互联网前端团队- Wang Ning 本文根据王宁老师在"2022 vivo开发者大会"现场演讲内容整理而成.公众号回复[2022 VDC]获取互联网技术分会场议题 ...

  3. Hive详解(02) - Hive 3.1.2安装

    Hive详解(02) - Hive 3.1.2安装 安装准备 Hive下载地址 Hive官网地址:http://hive.apache.org/ 官方文档查看地址:https://cwiki.apac ...

  4. 纸张尺寸【第十三届蓝桥杯省赛C++C组】

    纸张尺寸 在 ISO 国际标准中定义了 \(A0\) 纸张的大小为 \(1189mm×841mm\),将 \(A0\) 纸沿长边对折后为 \(A1\) 纸,大小为 \(841mm×594mm\) ,在 ...

  5. Java学习笔记 :2021年12月31日 上午

    Java学习笔记 :2021年12月31日 上午 目录 Java学习笔记 :2021年12月31日 上午 关于计算机语言 1.关于语言的分类 2.小结 关于Java语言的基础语法 1.主方法 2.其他 ...

  6. test20230111考试总结 -2023寒图论专题

    前言 赛时得分情况: A B C D E F G H I \(\texttt{Total}\) \(\texttt{Rank}\) \(100\) \(100\) \(10\) \(58\) \(54 ...

  7. [BUUCTF]洞拐洞拐洞洞拐

    [BUUCTF] 洞拐洞拐洞洞拐 问题链接:https://buuoj.cn/challenges#洞拐洞拐洞洞拐 问题附件是一张图片. 一. 图片分析 查看图片,发现是由有规律的黑白像素构成的PNG ...

  8. angular引入http服务创建服务注入

  9. 行为型模式 - 命令模式Command

    模式的定义与特点 命令模式(Command Pattern),是将一个请求封装成一个对象,从而使您可以用不同的请求对客户进行参数化.命令模式是把发出命令的责任和执行命令的责任分割开,委派给不同的对象. ...

  10. 【转】查看iOS崩溃日志

    我们在进行iPhone应用测试时必然会在"隐私"中找到不少应用的崩溃日志,但是不会阅读对于很多人来说简直头疼.在此小编为大家详细介绍一下具体的阅读方法,希望大家可以更快的定位BUG ...