近期接手一部分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服务问题总结的更多相关文章

  1. 【Java EE 学习 80 下】【调用WebService服务的四种方式】【WebService中的注解】

    不考虑第三方框架,如果只使用JDK提供的API,那么可以使用三种方式调用WebService服务:另外还可以使用Ajax调用WebService服务. 预备工作:开启WebService服务,使用jd ...

  2. C#调用WebService服务(动态调用)

    原文:C#调用WebService服务(动态调用) 1 创建WebService using System; using System.Web.Services; namespace WebServi ...

  3. 使用ajax和urlconnection方式调用webservice服务

    <html> <head> <title>使用ajax方式调用webservice服务</title> <script> var xhr = ...

  4. ajax调用webservice服务

    ajax调用是 html方向调用的, 而sqlconnection是 java代码调用的,本质差不多 <html> <head> <title>通过ajax调用we ...

  5. sqlconnection 调用webservice服务

    package cn.itcast.service.urlconnection; import java.io.InputStream; import java.io.OutputStream; im ...

  6. 问题:C#调webservice超时;结果:C#调用webservice服务超时

    C#调用WebService服务时,报错,The operation has timed out,意思是“操作超时”. 方法/步骤 首先修改服务端配置 WebService服务所在站点为服务端,它提供 ...

  7. C# - VS2019 WinFrm应用程序调用WebService服务

    WinFrm应用程序调用WebService服务 关于WebService的创建.发布与部署等相关操作不再赘述,传送门如下:C# VS2019 WebService创建与发布,并部署到Windows ...

  8. cxf 调用 webservice服务时传递 服务器验证需要的用户名密码

    cxf通过wsdl2java生成客户端调用webservice时,如果服务器端需要通过用户名和密码验证,则客户端必须传递验证所必须的用户名和密码,刚开始想通过url传递用户名和密码,于是在wsdl文件 ...

  9. C#开发WEBService服务 C++开发客户端调用WEBService服务

    编写WEBService服务端应用程序并部署 http://blog.csdn.net/u011835515/article/details/47615425 编写调用WEBService的C++客户 ...

随机推荐

  1. 【linux】bash常用快捷键

    Ctrl + r:逆向搜索命令历史 Ctrl + l:清屏 Ctrl + c:终止命令 Ctrl + u:删除光标前的指令 Ctrl + k:删除光标后的指令 Ctrl + d:退出登陆

  2. css样式单位取整,去掉'px'

    alert(parseInt($(".themes1").css("margin-left"), 10));

  3. centos7开机/etc/rc.local不执行的问题

    最近发现centos7 的/etc/rc.local不会开机执行,于是认真看了下/etc/rc.local文件内容的就发现了问题的原因了 #!/bin/bash# THIS FILE IS ADDED ...

  4. Avant Browser

    Avant Browser Avant 浏览器友好的用户界面为你的网络冲浪带来全新的效率和透明性.软件版本的不断升级使产品的可靠性稳步提高. 没有广告.没有恶意软件! Avant 浏览器是免费的.10 ...

  5. VBA相关

    --能否彻底隐藏某行或某列 用代码隐藏列,将其放在Private Sub Worksheet_SelectionChange(ByVal Target As Range)Columns(1).Enti ...

  6. hist和bar画图关系

    1.hist是绘制直方图,直方图显示了数据值的分布情况.  1>n = hist(Y,n)      将向量Y中的元素分到n个等间隔的范围内(默认为10个间隔),并返回每个范围内元素的个数作为一 ...

  7. Linux后台开发常用工具

    内存分析工具valgrind valgrind辅助工具qcachegrind 可视化查看valgrind结果 淘宝DBA团队发布的监控脚本,使用perl开发,可以完成对linux系统和MySql相关指 ...

  8. 解决RPM包相互依赖的有效方法

    出自:http://blog.csdn.net/kai27ks/article/details/7473683 前言:常用RPM的朋友们都知道,RPM简单易用,但是它的依赖关系是最头疼的!有时候比方说 ...

  9. SpringMVC参数类型转化错误调试方法

  10. Google glog 使用

    Google glog 使用 1        简介 Googleglog 库实现了应用级的日志记录,提供了C++ 风格的流操作和各种助手宏. 代码示例: #include <glog/logg ...