关于正常怎么使用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行。

  1. // This service uses SOAP 1.2 namespaces:
  2. //gsoap SOAP-ENV schema namespace: http://www.w3.org/2003/05/soap-envelope
  3. //gsoap SOAP-ENC schema namespace: http://www.w3.org/2003/05/soap-encoding

改为

  1. // This service uses SOAP 1.1 namespaces:
  2. //gsoap SOAP-ENV schema namespace: http://schemas.xmlsoap.org/soap/envelope/
  3. //gsoap SOAP-ENC schema namespace: http://schemas.xmlsoap.org/soap/encoding/

同时在解析WebServer.h时,将命令

  1. 在命令行输入soapcpp2 -C WebService.h -I F:\WebService\gsoap-2.7\gsoap\import

改为

  1. 在命令行输入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的话

  1. CStringW a;
  2. std::wstring b;
  3. a=b.c_str();

传回来的是结构体怎么办

定义结构体遍历返回值

  1. #define DllWebServerLoginAPI _declspec(dllexport)
  2. #include <stdio.h>
  3. #include <string>
  4. #include "atlconv.h"
  5. #include "BasicHttpBinding_USCOREIUserService.nsmap"
  6. #include "soapBasicHttpBinding_USCOREIUserServiceProxy.h"
  7. #include "atlstr.h"
  8. using namespace std;
  9. struct CKECKMENU
  10. {
  11. CStringW DisplayOrder;
  12. CString FatherId;
  13. CString FileDir;
  14. CString Icon;
  15. CString Id;
  16. CString InnetAppIp;
  17. CString Link;
  18. CString ModuleId;
  19. CString Name;
  20. CString OilnetAppIp;
  21. CString OpenMode;
  22. CString OutnetAppIp;
  23. CStringW SelectWellType;
  24. CString WellSelect;
  25. };
  26.  
  27. DllWebServerLoginAPI vector<class CKECKMENU > GetUsefulMenus( wchar_t* sid)
  28. {
  29. BasicHttpBinding_USCOREIUserService proxy(SOAP_C_UTFSTRING);
  30.  
  31. _WS1__GetUsefulMenus getMenu;
  32. getMenu.sid=sid;
  33.  
  34. _WS1__GetUsefulMenusResponse getMenuMenusResponse;
  35. if (proxy.__WS1__GetUsefulMenus(&getMenu, &getMenuMenusResponse) == SOAP_OK)
  36. {
  37. CKECKMENU* view =new CKECKMENU;
  38. std::vector<class CKECKMENU >Menu;
  39.  
  40. for(int i=;i<getMenuMenusResponse.GetUsefulMenusResult->Menu.size();i++)
  41. {
  42. wchar_t str[];
  43.  
  44. wcscpy(str, getMenuMenusResponse.GetUsefulMenusResult->Menu[i]->DisplayOrder->c_str());
  45.  
  46. //_wcslwr_s(str, wcslen(getMenuMenusResponse.GetUsefulMenusResult->Menu[i]->DisplayOrder->c_str()) + 1);
  47.  
  48. view->DisplayOrder=str;
  49. view->FatherId=getMenuMenusResponse.GetUsefulMenusResult->Menu[i]->FatherId;
  50. view->FileDir=getMenuMenusResponse.GetUsefulMenusResult->Menu[i]->FileDir;
  51. view->Icon=getMenuMenusResponse.GetUsefulMenusResult->Menu[i]->Icon;
  52. view->Id=getMenuMenusResponse.GetUsefulMenusResult->Menu[i]->Id;
  53. view->InnetAppIp=getMenuMenusResponse.GetUsefulMenusResult->Menu[i]->InnetAppIp;
  54. view->Link=getMenuMenusResponse.GetUsefulMenusResult->Menu[i]->Link;
  55. view->ModuleId=getMenuMenusResponse.GetUsefulMenusResult->Menu[i]->ModuleId;
  56. view->Name=getMenuMenusResponse.GetUsefulMenusResult->Menu[i]->Name;
  57. view->OilnetAppIp=getMenuMenusResponse.GetUsefulMenusResult->Menu[i]->OilnetAppIp;
  58. view->OpenMode=getMenuMenusResponse.GetUsefulMenusResult->Menu[i]->OpenMode;
  59. view->OutnetAppIp=getMenuMenusResponse.GetUsefulMenusResult->Menu[i]->OutnetAppIp;
  60. view->SelectWellType=getMenuMenusResponse.GetUsefulMenusResult->Menu[i]->SelectWellType->c_str();
  61. view->WellSelect=getMenuMenusResponse.GetUsefulMenusResult->Menu[i]->WellSelect;
  62. Menu.push_back(*view);
  63.  
  64. }
  65. return Menu;
  66.  
  67. }
  68.  
  69. }

传回来的文字乱码怎么办?

统一使用CString来接收字符

gSOAP 使用WebServer心得的更多相关文章

  1. dump、libeay32.dll、gsoap、webserver多线程调用gsoap产生崩溃

    问题:调用webserver接口出现dump文件,dump文件指向libeay32.dll有问题,产生崩溃的原因是gsoap多线程问题,多线程调用时需要程序启动的地方调用如下函数进行多线程初始化: i ...

  2. [转贴]gsoap使用心得!

    最近换了个工作环境,现在在大望路这边上班,呵,刚上班接到的任务就是熟悉gsoap!废话少说,现在开始gSoap学习! gSOAP是一个夸平台的,用于开发Web Service服务端和客户端的工具,在W ...

  3. Gsoap 使用心得 2

                                         Gsoap 返回图片byte的困惑 前些日子刚使用gsoap将二进制文件上传(服务期端使用c# wcf 编写),上传功能实现没 ...

  4. gsoap 学习 1-如何使用

    新年伊始,想把onvif和gsoap boa这三个东西学习下,并作下笔记,当然为了省时间,我昨天下午看了一个下午的gsaop官网pdf感触良多,也做了小测试,废话少说,一下也有一些是摘自网友博客,大部 ...

  5. WCF学习心得----(四)服务承载

    WCF学习心得----(四)服务承载 这一章节花费了好长的时间才整理个大概,主要原因是初次接触这个东西,在做练习实践的过程中,遇到了很多的问题,有些问题到目前还没有得以解决.所以在这一章节中,有一个承 ...

  6. 基于gSOAP使用头文件的C语言版web service开发过程例子

    基于gSOAP使用头文件的C语言版web service开发过程例子 一服务端 1 打开VS2005,创建一个工程,命名为calcServer. 2 添加一个头文件calc.h,编辑内容如下: 1// ...

  7. 多文件上传组件FineUploader使用心得

    原文 多文件上传组件FineUploader使用心得 做Web开发的童鞋都知道,需要经常从客户端上传文件到服务端,当然,你可以使用<input type="file"/> ...

  8. WCF学习心得----(三)服务承载

    WCF学习心得----(三)服务承载 这一章节花费了好长的时间才整理个大概,主要原因是初次接触这个东西,在做练习实践的过程中,遇到了很多的问题,有些问题到目前还没有得以解决.所以在这一章节中,有一个承 ...

  9. gsoap使用总结

    WebService.soap.gsoap基本概念 WebService服务基本概念:就是一个应用程序,它向外界暴露出一个可以通过web进行调用的API,是分布式的服务组件.本质上就是要以标准的形式实 ...

随机推荐

  1. 洛谷 P2542 [AHOI2005]航线规划 树链剖分_线段树_时光倒流_离线

    Code: #include <map> #include <cstdio> #include <algorithm> #include <cstring&g ...

  2. CSS命令

    border-bottom-right-radius: 10px;/* 文本框的角的弯曲度*/ border-bottom-left-radius: 10px; border-top-left-rad ...

  3. 洛谷3833 [SHOI2012]魔法树

    SHOI2012 D2T3 题目描述 Harry Potter 新学了一种魔法:可以让改变树上的果子个数.满心欢喜的他找到了一个巨大的果树,来试验他的新法术. 这棵果树共有N个节点,其中节点0是根节点 ...

  4. 【Appium】每次启动是提示安装setting和unlock app的解决办法

    进入appium安装目录,C:\Program Files (x86)\Appium\node_modules\appium\lib\devices\android,编辑android.js文件,注释 ...

  5. python 调试大法-大笨蛋的笔记

    说在前面 我觉得没有什么错误是调试器无法解决的,如果没有,那我再说一遍,如果有,那当我没说 一.抛出异常 可以通过 raise 语句抛出异常,使程序在我们已经知道的缺陷处停下,并进入到 except  ...

  6. 紫书 习题 10-7 UVa 10539(long long + 素数筛)

    注意要开long long 如果int * int会炸 那么久改成long long * int #include<cstdio> #include<vector> #incl ...

  7. 《Java并发编程实战》第五章 同步容器类 读书笔记

    一.同步容器类 1. 同步容器类的问题 线程容器类都是线程安全的.可是当在其上进行符合操作则须要而外加锁保护其安全性. 常见符合操作包括: . 迭代 . 跳转(依据指定顺序找到当前元素的下一个元素) ...

  8. C#读写共享目录

    C#读写共享目录 该试验分下面步骤: 1.在server设置一个共享目录.在这里我的serverip地址是10.80.88.180,共享目录名字是test,test里面有两个文件:good.txt和b ...

  9. POJ 3150 Cellular Automaton(矩阵高速幂)

    题目大意:给定n(1<=n<=500)个数字和一个数字m,这n个数字组成一个环(a0,a1.....an-1).假设对ai进行一次d-step操作,那么ai的值变为与ai的距离小于d的全部 ...

  10. java教程(五)SSH框架-配置

    前言:从这篇博客開始我将继续讲述Java教程:SSH篇.主要内容环绕SSH框架分析与搭建,今天先简介一下SSH的配置. SSH配置顺序是: spring-->hibernate-->str ...