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