关于c++用web引用访问webservice

来源:互联网 发布:数据库应用系统有什么 编辑:程序博客网 时间:2024/06/08 05:23

前段时间由于工作需要,需要用c++创建dll 供其他程序通过dll调用webservice服务 ,现在抽空总结一下方法及注意的问题。至于怎么创建webservice服务以及发布  和IIS设置的相关问题  网上也有很多资料   我的另外两篇博客中也有相关介绍,不再赘述。

c++访问webservice有很多方法,各种方法也各有利弊,比较常用的就是web引用,比较方便,如果调用的服务地址需要经常改动,web引用不是很方便,但也是可以的    原理跟gsoap访问差不多,可以参考我的相关博文。

  1、新建一个工程,点击工程名称右键->点击Add Web Reference 出现下图 在URL输入需要访问的服务地址 点GO即可列出服务内容,确定无误后点后边的  Add Reference 即可添加成功





2、添加成功后怎么使用

在工程cpp文件中添加头文件,添加成功后会自动添加一个WebService.h的头文件,其中包含了所有你添加的web服务头文件,并且产出重新添加web服务后,会自动重新添加,哪怕是同一个服务。如果你添加了3个web服务,其中就会包含你这三个服务的头文件。

3、声明使用的namespace 

using namespace WebService1;

4、实例化服务中的类  即可使用了  使用之前要初始化组件

::CoInitialize(NULL) ;CWebService1 ws;BSTR bstr,strReturn;bstr=_com_util::ConvertStringToBSTR(ptrPatid);ws.GetPatientInfo(bstr,&strReturn);strRes=_com_util::ConvertBSTRToString(strReturn);


需要注意的是:

即便你服务中传入参数是string类型的,调用的时候要转化为BSTR,你可以到你引用的服务的头文件中查看,其中有详细的定义说明。比如上面的例子中。服务名叫WebReference,在WebReference.h中包含了,你引用服务中所有的服务声明及定义,例子中实例化使用的是类CWebService1   头文件中都有定义。必须按头文件的定义来使用。这个类名其实也就是发布的服务中使用的类名。

总结:用web引用比较简单,注意的内容也就这么多,如果你需要多个引用,这些引用中的namespace  和 类名不能相同,不然无法使用。

附上一个简单的例子:

#include "stdafx.h"#include "stdio.h"#include "WebService.h"#include "iostream"//#include "comutil.h"#include <comdef.h>   //包含重载using namespace std;using namespace WebService1;int _tmain(int argc, _TCHAR* argv[]){// 初始化com组件运行环境::CoInitialize(NULL);CWebService1 ws;int nNum1 = 10;int nNum2 = 10;int nSum = 0;HRESULT hr = ws.Sum(nNum1, nNum2, &nSum);printf("The Sum of the two num is:%d\n",nSum);BSTR b_msg = _com_util::ConvertStringToBSTR(" good luck!");  BSTR b_result; hr=ws.HelloWorld(b_msg,&b_result);//CString str(b_result);cout << _com_util::ConvertBSTRToString(b_result) << endl;  getchar();return 0;}




0 0
原创粉丝点击