C++调用WebService服务问题总结
近期接手一部分C++研发工作,同时与.NET开发小组进行软件功能协作,于是需要调用.NET WebService服务,已完成数据的网络通讯业务功能;结束之余,将手头碰到的问题总结罗列如下:
- C++如何调用.NET WebService服务。
- 如何进一步灵活设定WS服务的地址。
- ATLSOAP: CSoapRootHandler::InitializeSOAP -- failed to get SAXXMLReader调用错误问题。
1、C++如何调用.NET WebService服务
在.NET中使用WS服务时,引用该服务,然后实例化服务对象、直接调用对象成员方法,操作使用还是较方便的;而在C++中则需要费点周折,需要结合使用ATL Server及发布的WS服务地址。
(1)、在Visual Studio 2008以及以后版本中,微软停止了非托管C++的直接WebService引用。不过ATL Server代码已经托管到开源网站上,我们可以找到ATL Server的源代码(http://atlserver.codeplex.com/),下载该源码包,之后用回到包中的include目录的所有文件。
(2)、获取发布后的WS服务地址,然后在VS2005中,随意建立一个WIN32应用程序项目,点击项目右键,选择Add Web Reference,输入WS服务地址完成添加;之后VS会在项目中生成针对该WS服务的头文件WebReference.h(头文件中包含了一个CWebService类)。
(3)、最后,在C++项目代码中,添加ATL Server所有头文件与引用atlsoap.h、及编译引用的WebReference.h头文件,使用其中CWebService类,实例化对象及调用其成员方法。
2、如何进一步灵活设定WS服务地址
WS服务的地址,可能每次的发布,其地址是不同的,而我们刚编译引用的WebReference.h头文件,其类的构造方法中已经固定了地址,如
CWebServiceT(ISAXXMLReader *pReader = NULL) : TClient(_T("http://192.168.1.181:8033/asmx/WebService.asmx"))
那么,这就需要定义和改变其入口参数CWebServiceT(ISAXXMLReader *pReader = NULL) : TClient(strWebService)。
3、ATLSOAP: CSoapRootHandler::InitializeSOAP -- failed to get SAXXMLReader错误问题
在调用时,HRESULT hr = pService->UpdateData(),可能会返回失败,调试会发现该错误;那么可以尝试在调用前后加入以下方法代码的调用:
::CoInitialize(NULL);
pService->SetProxy();
// Do your stuff
pService->Uninitialize();
::CoUninitialize();
C++调用WebService服务问题总结的更多相关文章
- 【Java EE 学习 80 下】【调用WebService服务的四种方式】【WebService中的注解】
不考虑第三方框架,如果只使用JDK提供的API,那么可以使用三种方式调用WebService服务:另外还可以使用Ajax调用WebService服务. 预备工作:开启WebService服务,使用jd ...
- C#调用WebService服务(动态调用)
原文:C#调用WebService服务(动态调用) 1 创建WebService using System; using System.Web.Services; namespace WebServi ...
- 使用ajax和urlconnection方式调用webservice服务
<html> <head> <title>使用ajax方式调用webservice服务</title> <script> var xhr = ...
- ajax调用webservice服务
ajax调用是 html方向调用的, 而sqlconnection是 java代码调用的,本质差不多 <html> <head> <title>通过ajax调用we ...
- sqlconnection 调用webservice服务
package cn.itcast.service.urlconnection; import java.io.InputStream; import java.io.OutputStream; im ...
- 问题:C#调webservice超时;结果:C#调用webservice服务超时
C#调用WebService服务时,报错,The operation has timed out,意思是“操作超时”. 方法/步骤 首先修改服务端配置 WebService服务所在站点为服务端,它提供 ...
- C# - VS2019 WinFrm应用程序调用WebService服务
WinFrm应用程序调用WebService服务 关于WebService的创建.发布与部署等相关操作不再赘述,传送门如下:C# VS2019 WebService创建与发布,并部署到Windows ...
- cxf 调用 webservice服务时传递 服务器验证需要的用户名密码
cxf通过wsdl2java生成客户端调用webservice时,如果服务器端需要通过用户名和密码验证,则客户端必须传递验证所必须的用户名和密码,刚开始想通过url传递用户名和密码,于是在wsdl文件 ...
- C#开发WEBService服务 C++开发客户端调用WEBService服务
编写WEBService服务端应用程序并部署 http://blog.csdn.net/u011835515/article/details/47615425 编写调用WEBService的C++客户 ...
随机推荐
- html body标签的几个属性 禁用鼠标右键,禁用鼠标选中文字等
<body oncontextmenu='return false' ondragstart='return false' onselectstart ='return false' onsel ...
- 通过[蜘蛛协议]Robots.txt禁止搜索引擎收录的方法
什么是robots.txt文件? 搜索引擎通过一种程序robot(又称spider),自动访问互联网上的网页并获取网页信息. 您可以在您的网站中创建一个纯文本文件robots.txt,在这个文件中 ...
- class对象不太明白(待解答)
如下:定义了一个Servletcontext的Listener,希望获取当前WEB应用的某一个文件对应的输入流 不懂为什么要这样获取?不是可以直接用servletContext.getResource ...
- c++ 迭代器库
来自http://zh.cppreference.com/w/cpp/iterator 迭代器库提供了5种迭代器的定义,同时还提供了迭代器特征.适配器及其相关的工具函数. 迭代器共有5种:InputI ...
- Jedis 连接redis超时
redis默认不允许远程连接 用vi打开Redis服务器的配置文件redis.conf ~ sudo vi /etc/redis/redis.conf #注释bind #bind 127.0.0.1 ...
- @RequesParam注解源码解析
- PLSQL_低效SQL的识别和查询汇总(案例)
2014-12-18 Created By BaoXinjian
- PLSQL_性能优化系列10_Oracle Array数据组优化
2014-09-25 Created By BaoXinjian
- linux命令(12)uniq去重
转载地址:http://blog.51yip.com/shell/1022.html 实例详细说明linux下去除重复行命令uniq 一,uniq干什么用的 文本中的重复行,基本上不是我们所要的,所以 ...
- centos7通过firewalld更改sshd端口
1.设置selinux端口 [root@hn ~]# semanage port -l|grep ssh -bash: semanage: 未找到命令 [root@hn ~]# whereis sem ...