前言

因为最近的项目中需要运用到在MFC程序中调用WebService里面集成好了的函数,所以特意花了一天的时间来研究WebService的构建以及如何在MFC的程序中添加Web引用,进而来实现在C++ MFC中调用那些WebService中写好的函数,中间也是遇到了一些不懂和不解的地方,好在通过度娘上的一些资料和自己的研究逐一的解决了,写这篇文章的主要目的是,第一:让自己记得更清楚,也方便以后不记得了可以及时回想起来。第二:让其他的一些和我碰到一样问题的朋友能更好的解决此问题。内容仅供参考,如有不对之处希望大家提出来一起交流。

第一部分:WebService的创建

首先,打开VS2005,“File->New->Project|Visual C#|ASP.NET Web Service Application”,新建一个名称为“MyWebService”的应用程序。
 
接下来,你可以在新建的工程文件中修改代码,你可以将[WebService(Namespace = "http://tempuri.org/")]中的tempuri.org改为你的IP地址或域名地址目录,你也可以在类里面添加新的代码,如下所示。
using System;
using System.Data;
using System.Web;
using System.Collections;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.ComponentModel; namespace MyWebService
{
/// <summary>
/// Summary description for Service1
/// </summary>
[WebService(Namespace = "http://192.168.22.36/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[ToolboxItem(false)]
public class Service1 : System.Web.Services.WebService
{ [WebMethod(Description = "Default Function")]
public string HelloWorld()
{
return "Hello World";
}
// 新添加的方法
[WebMethod(Description = "My Sample Function")]
public int Sum(int a, int b)
{
return a+b;
}
}
}

接下来,你可以debug运行一下你现在的程序,可以看到现在的效果是这样的。

点击"Sum"超链接,跳转到下一个页面。

在编辑框中输入a = 10,b = 100,点击调用,就可以看到XML格式返回的WebService结果。

到这里,就说明我们的Web Service的环境没有问题。接下来,我们要做的就是把我们建立好的Web Service发布到iis服务器上去。

第二部分:WebService的发布

首先,你可以在你自己的桌面新建一个文件夹(SampleWebService),这里有一个地方需要注意,我们需要右键点击文件夹属性,选择安全tab页,在安全页下面点击“编辑”,然后在弹出的页面里面添加EveryOne的组或用户名(EveryOne的SYSTEM的权限全部勾选允许)。
 
设定完后的图片如下:
 
然后,进入到你第一步过程中新建好的WebService程序,选择Release编译环境,在“Solution Explorer”下面选择你的WebService程序“MyWebService”,点击右键选择“Publish“,弹出“Publish Web”对话框,在弹出的对话框中设置”Target Location“为你刚才新建的文件夹”SampleWebService“的路径,点击”Publish“按钮,如下图所示。
 
接下来,我们来到”Internet信息服务(IIS)管理器“,点击网站右键选择“添加网站”,在弹出的”添加网站“对话框中设置“网站名称”为SampleWebSite,物理路径为我们上面新建的文件夹的路径(也就是C:\Users\Administrator\Desktop\SampleWebService),“端口号”为避免重复,我们可以把它修改为8081,点击”确定“按钮,如下图所示。
 
接下来,我们双击”Sample Website主页”下面的“目录浏览”,点击启用。
 
接下来,我们来到“应用程序池”,选中我们新建号的应用程序池“SampleWebSite”,点击右键选中“高级设置”,在弹出的高级设置对话框中将“启用32位应用程序”设置为True。
 
到这里,我们的WebService就发布完成了。你可以点击iis管理器右手边的“浏览网站”下面的“浏览*:8081(http)”来看一下你的WebService是否发布成功,发布成功的话会显示如下页面。

第三部分:调用WebService

首先,我们新建一个Win32应用程序“Sample”。然后进入应用程序,在“Solution Explorer”下面选择你的Win32应用程序“Sample”,点击右键选择“Add Web Reference“,弹出“Add Web Reference”对话框,在弹出的对话框中设置”URL“为我们在第二部分中发布的链接“http://localhost:8081/Service1.asmx”,设置“Web reference name”为SampleRefer,点击”Add Reference“按钮,如下图所示。
 
执行完这步以后,我们可以看到应用程序中多出来了几个文件。
 
接下来,我们在Sample.cpp中添加如下代码。
#include "stdafx.h"
#include <stdio.h>
#include "WebService.h" using namespace Service1; int _tmain(int argc, _TCHAR* argv[])
{
// 初始化com组件运行环境
::CoInitialize(NULL);
// 如果第八行没有命名空间Service1
// 这里可以写成Service1::CService1 ws
CService1 ws;
int nNum1 = 10;
int nNum2 = 100;
int nSum = 0;
HRESULT hr = ws.Sum(nNum1, nNum2, &nSum); printf("The Sum of the two num is:%d\n",nSum);
getchar(); return 0;
}
 

运行程序,我们可以得到下面的结果。

 

总结

至此,我们的C++程序中调用WebService的整个实现过程都介绍完毕,对于MFC的应用程序,和Win32的应用程序的实现代码没有什么区别,这里我们就不多做介绍。对于我来说,过程中主要遇到的问题主要还是在WebService发布到iis上时的一些环境的配置不是很准确,例如发布的时候我们必须Release编译环境,必须设置Everyone的权限等。还有就是写代码的时候不是像我们调用类里面的函数一样去调用WebService中的函数,我们要做一个com组件的初始化,为了方便要定义命名空间,调用的函数有一个HRESULT类型的返回值等等。最后还是希望大家可以相互学习吧,有什么不对的地方一起讨论。

C++程序中调用WebService的实现的更多相关文章

  1. 在ASP.NET 中调用 WebService 服务

    一.webservice定义 详见 https://www.cnblogs.com/phoebes/p/8029464.html 二.在ASP.NET MVC 中调用 webservice 1:要调用 ...

  2. 在网页程序或Java程序中调用接口实现短信猫收发短信的解决方案

    方案特点: 在网页程序或Java程序中调用接口实现短信猫收发短信的解决方案,简化软件开发流程,减少各应用系统相同模块的重复开发工作,提高系统稳定性和可靠性. 基于HTTP协议的开发接口 使用特点在网页 ...

  3. 在Android中调用WebService

    某些情况下我们可能需要与Mysql或者Oracle数据库进行数据交互,有些朋友的第一反应就是直接在Android中加载驱动然后进行数据的增删改查.我个人不推荐这种做法,一是手机毕竟不是电脑,操作大量数 ...

  4. iOS程序中调用系统自带应用(短信,邮件,浏览器,地图,appstore,拨打电话,iTunes,iBooks )

    在网上找到了下在记录下来以后方便用 在程序中调用系统自带的应用,比如我进入程序的时候,希望直接调用safar来打开一个网页,下面是一个简单的使用:

  5. Java程序中调用Python脚本的方法

    在程序开发中,有时候需要Java程序中调用相关Python脚本,以下内容记录了先关步骤和可能出现问题的解决办法. 1.在Eclipse中新建Maven工程: 2.pom.xml文件中添加如下依赖包之后 ...

  6. Native Application 开发详解(直接在程序中调用 ntdll.dll 中的 Native API,有内存小、速度快、安全、API丰富等8大优点)

    文章目录:                   1. 引子: 2. Native Application Demo 展示: 3. Native Application 简介: 4. Native Ap ...

  7. 如何在程序中调用Caffe做图像分类

    Caffe是目前深度学习比较优秀好用的一个开源库,采样c++和CUDA实现,具有速度快,模型定义方便等优点.学习了几天过后,发现也有一个不方便的地方,就是在我的程序中调用Caffe做图像分类没有直接的 ...

  8. 存储过程中调用webservice

    存储过程中调用webservice其实是在数据库中利用系统函数调用OLE. 1.查找webservice api 可得到MSSOAP.SoapClient. 2.查找API 接口可得到mssoapin ...

  9. 从C#程序中调用非受管DLLs

    从C#程序中调用非受管DLLs 文章概要: 众所周知,.NET已经渐渐成为一种技术时尚,那么C#很自然也成为一种编程时尚.如何利用浩如烟海的Win32 API以及以前所编写的 Win32 代码已经成为 ...

随机推荐

  1. C++ STL std::wstring_convert处理UTF8

    #include <iostream> #include <string> #include <locale> #include <codecvt> # ...

  2. BZOJ3932:[CQOI2015]任务查询系统

    浅谈主席树:https://www.cnblogs.com/AKMer/p/9956734.html 题目传送门:https://www.lydsy.com/JudgeOnline/problem.p ...

  3. TreeView滚动TreeViewItem

    今天帮忙修了一个bug, 在拖动TreeViewItem时,需要滚动TreeView向前翻页,或向后翻页. 思路: 1.找到TreeView控件里的ItemsControl 2.找到ItemsCont ...

  4. nagios监控windows配置

    1.下载并安装windows插件 http://sourceforge.net/projects/nscplus/NSCP-0.4.1.73-x64.msi2.windows端配置 nsclient. ...

  5. Spring管理Filter和Servlet(在servlet中注入spring容器中的bean)

    在使用spring容器的web应用中,业务对象间的依赖关系都可以用context.xml文件来配置,并且由spring容器来负责依赖对象 的创建.如果要在servlet中使用spring容器管理业务对 ...

  6. java 对象锁和类锁的区别(转)

    java 对象锁和类锁的区别   转自; ) ); ; ) ); 上述的代码,第一个方法时用了同步代码块的方式进行同步,传入的对象实例是this,表明是当前对象,当然,如果需要同步其他对象实例,也不可 ...

  7. Collection与Map总结

    顺序表和链表统称为线性表:顺序表一般表现为数组,如:ArrayList的实现;链表有单链表.双链表.循环链表的区分,如:LinkedArrayList由双链表+哈希表实现

  8. 优酷电视剧爬虫代码实现一:下载解析视频网站页面(4)补充: Java正则表达式Matcher.group(int group)相关类解析

    在Java正则表达式的相关类Matcher中,有如下几个方法: - int groupCount() - String group(int group) - int start(int group)  ...

  9. JavaScript 数据访问(通译自High Performance Javascript 第二章) [转]

    JavaScript 数据访问(通译自High Performance Javascript 第二章)   JavaScript 数据访问(翻译自High Performance Javascript ...

  10. SharePoint 2010 搜索结果没有显示部分文件

    Why SharePoint 2010 search does not show some results?   SharePoint 2010 search is better than ever ...