前言

因为最近的项目中需要运用到在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. Android HAL层与Linux Kernel层驱动开发简介

    近日稍微对Android中的驱动开发做了一些简要的了解. HAL:Hardware Abstract Layer 硬件抽象层,由于Linux Kernel需要遵循GPL开源协议,硬件厂商为了保护自己硬 ...

  2. win7-64 mysql的安装

    1.https://jingyan.baidu.com/article/597035521d5de28fc00740e6.html 2.net start mysql 无法启动的3534的错误的解决办 ...

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

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

  4. Spring读取加密属性文件处理--待整理

    引言:Spring框架俨然已经是目前Java WEB项目开发的一个宠儿,更有人将Spring, Struts,和Hibernage称之为Java WEB项目开发的3件利器.Spring的依赖.注入.A ...

  5. 使用c语言实现的常用函数

    /* 为了面试准备的,有些在工作中也可以用用,本人算法方面比较欠缺,如果有更优秀的算法麻烦告诉我啊 */ /* strcat的实现 */ #include <assert.h> char* ...

  6. 小程序与Spring项目数据交互

    上一篇博客刚说了利用Postman来测试Spring Boot项目,测试通过后就可以和小程序进行交互了. 首先要在微信开发者工具里面,点击"详情",勾选上"不校验合法域名 ...

  7. HDU - 4821 String(窗口移动+map去重+hash优化)

    String Given a string S and two integers L and M, we consider a substring of S as “recoverable” if a ...

  8. 使用HTML辅助方法载入分部视图

    在webform中我们用过user control可以减少重复代码也利于将页面模组化, 在mvc中 叫分部视图 Partial View.   也就是一个片段的view.可以利用Partial vie ...

  9. Linux下查看磁盘剩余空间和文件夹大小

    1. du -sh 查看当前文件夹大小 2. du -sh * | sort -n 列出当前文件夹下的所有文件夹及其大小,并按照文件夹大小排序 du - sh *  //查看当前文件夹下所有文件的大小 ...

  10. from appium import webdriver 报错

    from appium import webdriver 报错 看看你的文件是不是就叫appium