gSOAP 使用WebServer心得
关于正常怎么使用gSOAP的话,下面那篇博客已经讲得非常详细,我就不再赘述了
https://www.cnblogs.com/dengpeng1004/p/6165751.html
问题1:
WCF server with basicHttpBinding use soap1.1, while gSoap generates client that uses soap1.2.
如果你使用的gSOAP是1.2版本,而WebServer服务器是1.0版本,WCF server 和 gSoap产生的 client端之间通讯的soap message format不匹配。当客户端发起请求时,server端无法识别请求。但是你如果为了版本去另下一个gSOAP,时间成本有点多,其实gSOAP有向下兼容的功能。那现在我们看看如何来生成1.0版本的服务端。
在生成好的WebServer.h中修改101行到103行。
// This service uses SOAP 1.2 namespaces:
//gsoap SOAP-ENV schema namespace: http://www.w3.org/2003/05/soap-envelope
//gsoap SOAP-ENC schema namespace: http://www.w3.org/2003/05/soap-encoding
改为
// This service uses SOAP 1.1 namespaces:
//gsoap SOAP-ENV schema namespace: http://schemas.xmlsoap.org/soap/envelope/
//gsoap SOAP-ENC schema namespace: http://schemas.xmlsoap.org/soap/encoding/
同时在解析WebServer.h时,将命令
在命令行输入soapcpp2 -C WebService.h -I F:\WebService\gsoap-2.7\gsoap\import
改为
在命令行输入soapcpp2 -C WebService.h -I F:\WebService\gsoap-2.7\gsoap\import -1
-1代表1.1版本,这样版本冲突的问题就解决了。
WebServer 是wstring 的指针类型,wchar_t *,我怎么接收呢
最好使用CString类型来接收字符串内容
wchar_t* 直接使用CString
wstring的话
CStringW a;
std::wstring b;
a=b.c_str();
传回来的是结构体怎么办
定义结构体遍历返回值
#define DllWebServerLoginAPI _declspec(dllexport)
#include <stdio.h>
#include <string>
#include "atlconv.h"
#include "BasicHttpBinding_USCOREIUserService.nsmap"
#include "soapBasicHttpBinding_USCOREIUserServiceProxy.h"
#include "atlstr.h"
using namespace std;
struct CKECKMENU
{
CStringW DisplayOrder;
CString FatherId;
CString FileDir;
CString Icon;
CString Id;
CString InnetAppIp;
CString Link;
CString ModuleId;
CString Name;
CString OilnetAppIp;
CString OpenMode;
CString OutnetAppIp;
CStringW SelectWellType;
CString WellSelect;
}; DllWebServerLoginAPI vector<class CKECKMENU > GetUsefulMenus( wchar_t* sid)
{
BasicHttpBinding_USCOREIUserService proxy(SOAP_C_UTFSTRING); _WS1__GetUsefulMenus getMenu;
getMenu.sid=sid; _WS1__GetUsefulMenusResponse getMenuMenusResponse;
if (proxy.__WS1__GetUsefulMenus(&getMenu, &getMenuMenusResponse) == SOAP_OK)
{
CKECKMENU* view =new CKECKMENU;
std::vector<class CKECKMENU >Menu; for(int i=;i<getMenuMenusResponse.GetUsefulMenusResult->Menu.size();i++)
{
wchar_t str[]; wcscpy(str, getMenuMenusResponse.GetUsefulMenusResult->Menu[i]->DisplayOrder->c_str()); //_wcslwr_s(str, wcslen(getMenuMenusResponse.GetUsefulMenusResult->Menu[i]->DisplayOrder->c_str()) + 1); view->DisplayOrder=str;
view->FatherId=getMenuMenusResponse.GetUsefulMenusResult->Menu[i]->FatherId;
view->FileDir=getMenuMenusResponse.GetUsefulMenusResult->Menu[i]->FileDir;
view->Icon=getMenuMenusResponse.GetUsefulMenusResult->Menu[i]->Icon;
view->Id=getMenuMenusResponse.GetUsefulMenusResult->Menu[i]->Id;
view->InnetAppIp=getMenuMenusResponse.GetUsefulMenusResult->Menu[i]->InnetAppIp;
view->Link=getMenuMenusResponse.GetUsefulMenusResult->Menu[i]->Link;
view->ModuleId=getMenuMenusResponse.GetUsefulMenusResult->Menu[i]->ModuleId;
view->Name=getMenuMenusResponse.GetUsefulMenusResult->Menu[i]->Name;
view->OilnetAppIp=getMenuMenusResponse.GetUsefulMenusResult->Menu[i]->OilnetAppIp;
view->OpenMode=getMenuMenusResponse.GetUsefulMenusResult->Menu[i]->OpenMode;
view->OutnetAppIp=getMenuMenusResponse.GetUsefulMenusResult->Menu[i]->OutnetAppIp;
view->SelectWellType=getMenuMenusResponse.GetUsefulMenusResult->Menu[i]->SelectWellType->c_str();
view->WellSelect=getMenuMenusResponse.GetUsefulMenusResult->Menu[i]->WellSelect;
Menu.push_back(*view); }
return Menu; } }
传回来的文字乱码怎么办?
统一使用CString来接收字符
gSOAP 使用WebServer心得的更多相关文章
- dump、libeay32.dll、gsoap、webserver多线程调用gsoap产生崩溃
问题:调用webserver接口出现dump文件,dump文件指向libeay32.dll有问题,产生崩溃的原因是gsoap多线程问题,多线程调用时需要程序启动的地方调用如下函数进行多线程初始化: i ...
- [转贴]gsoap使用心得!
最近换了个工作环境,现在在大望路这边上班,呵,刚上班接到的任务就是熟悉gsoap!废话少说,现在开始gSoap学习! gSOAP是一个夸平台的,用于开发Web Service服务端和客户端的工具,在W ...
- Gsoap 使用心得 2
Gsoap 返回图片byte的困惑 前些日子刚使用gsoap将二进制文件上传(服务期端使用c# wcf 编写),上传功能实现没 ...
- gsoap 学习 1-如何使用
新年伊始,想把onvif和gsoap boa这三个东西学习下,并作下笔记,当然为了省时间,我昨天下午看了一个下午的gsaop官网pdf感触良多,也做了小测试,废话少说,一下也有一些是摘自网友博客,大部 ...
- WCF学习心得----(四)服务承载
WCF学习心得----(四)服务承载 这一章节花费了好长的时间才整理个大概,主要原因是初次接触这个东西,在做练习实践的过程中,遇到了很多的问题,有些问题到目前还没有得以解决.所以在这一章节中,有一个承 ...
- 基于gSOAP使用头文件的C语言版web service开发过程例子
基于gSOAP使用头文件的C语言版web service开发过程例子 一服务端 1 打开VS2005,创建一个工程,命名为calcServer. 2 添加一个头文件calc.h,编辑内容如下: 1// ...
- 多文件上传组件FineUploader使用心得
原文 多文件上传组件FineUploader使用心得 做Web开发的童鞋都知道,需要经常从客户端上传文件到服务端,当然,你可以使用<input type="file"/> ...
- WCF学习心得----(三)服务承载
WCF学习心得----(三)服务承载 这一章节花费了好长的时间才整理个大概,主要原因是初次接触这个东西,在做练习实践的过程中,遇到了很多的问题,有些问题到目前还没有得以解决.所以在这一章节中,有一个承 ...
- gsoap使用总结
WebService.soap.gsoap基本概念 WebService服务基本概念:就是一个应用程序,它向外界暴露出一个可以通过web进行调用的API,是分布式的服务组件.本质上就是要以标准的形式实 ...
随机推荐
- HDU Victor and World (最短路+状态压缩)
题目链接:传送门 题意: n个城市m条路.刚開始在点1,求把每一个城市都遍历一边最后回到1的花费的最小值. 分析: +n2∗2n). 转自Bestcode. 以下说说我的状态转移,首先 ...
- OpenCV学习笔记09--通过cvPtr2D或指针算法绘制图形
练习:创建一个1000*1000的三通道图像,将其元素所有置0.以(200,50)和(400,200)为顶点绘制一个绿色平面 我们能够用两种方法来实现这一功能,一个是使用cvPtr2D,可是因为使用了 ...
- android数据储存之存储方式
能够将数据储存在内置或可移动存储,数据库,网络.sharedpreference. android能够使用Content provider来使你的私有数据暴漏给其它应用程序. 一.sharedpref ...
- linux系统 硬链接和软链接
背景: 当几个用户同在一个项目里工作时.经常须要共享文件. 假设一个共享文件同一时候出如今属于不同用户的不同文件夹下.工作起来就非常方便. 比如B和C文件夹下有一文件D是两者都能够訪问和改动的共享文件 ...
- uestc 94(区间更新)
题意:有一个字符串全部由'('和')'组成.然后有三种操作,query a b输出区间[a,b]字符串的括号序列是否合法.reverse a b把区间[a,b]字符串里全部'('替换成')',而且把全 ...
- HDU 4714 Tree2cycle(树型DP)
解题思路: 将一棵树变成一个环.假设一个结点的分叉数目大于等于2.则将它与父节点断开.而且断开子结点数目sum - 2条边,并再次连接sum-2个儿子形成一条直链然后这条游离链与还有一条游离链相连,共 ...
- hadoop集群中动态添加新的DataNode节点
集群中现有的计算能力不足,须要另外加入新的节点时,使用例如以下方法就能动态添加新的节点: 1.在新的节点上安装hadoop程序,一定要控制好版本号,能够从集群上其它机器cp一份改动也行 2.把name ...
- CSS3绘制砖墙-没实用不论什么图片
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- SSM框架之中如何进行文件的上传下载
SSM框架的整合请看我之前的博客:http://www.cnblogs.com/1314wamm/p/6834266.html 现在我们先看如何编写文件的上传下载:你先看你的pom.xml中是否有文件 ...
- drbd脑裂
环境: Primary 节点:node1Secondary 节点:node2 DRBD产生脑裂的原因: (1. 采用HA环境的时候自动切换导致脑裂; (2. 人为操作或配置失误,导 ...