VC++通过gSOAP调用C#的Web Service

来源:互联网 发布:js中json对象转字符串 编辑:程序博客网 时间:2024/05/21 19:34

VC++写的程序本来通过HTTP调用ISAPI进行处理,但是感觉模式有些老了,想用Web Service试试。

C#写程序调用WebService是很方便的,但是VC++有些麻烦。看了几种方法,比如MSSOAP.DLL,还有其他的库,感觉比较老了,并且最近没有更新,倒是gSOAP一直更新,最新的是2.8.18。

先是建立了一个Web Service,用的是C#,默认的HelloWorld。

然后使用gSOAP建立访问代码:

-先用wdsl2h产生h文件,命令格式类似:wsdl2h -o my1.h http://localhost:1687/webservice1.asmx?WDSL

--运行的时候有可能会提示找不到stdvector.h等文件,最简单的就是将wdsl2h放到gsoap的import目录中运行。

-再用soapcpp2产生访问代码,命令格式类似:soapcpp2 my1.h

--会产生一堆的文件。

再建立一个VC++的对话框应用,建立一个textbox和一个button。

-将gsoap产生的一些文件加入到此工程中,包括:.nsmap、stdsoap2.h、stdsoap2.cpp、soapC.cpp、soapClient.cpp、soapH.h、soapStub.h。

--如果添加了多于的会提示定义重复等,然后移除就可以了,比如soapClientLib.cpp就不要。

-编译中可能会提示stdafx.h文件,可以设置工程不需要预编译头文件,或者在有关的文件最开始加入 #include "stdafx.h"就可以了。

-添加textbox的变量,button的处理函数,添加代码:

#include "soaph.h"#include "webservice1soap.nsmap"void CMFCApplication2Dlg::OnBnClickedButton1(){struct soap soap1;soap_init(&soap1);char szSvr[] = "http://localhost:32392/WebService1.asmx"; //http://localhost:32392/WebService1.asmx?op=HelloWorld_ns1__HelloWorld hw1;_ns1__HelloWorldResponse hws1;soap_call___ns1__HelloWorld(&soap1, szSvr, "",&hw1,hws1);//HelloWorldif (soap1.error){//get error messagereturn;}m_sRes = hws1.HelloWorldResult->c_str();soap_destroy(&soap1);soap_end(&soap1);soap_done(&soap1);UpdateData(FALSE);}
-然后编译VC++工程,应该会成功。


测试过程:

启动WebService服务;

启动VC++应用,点击button1,结果会显示到textbox中。


0 0
原创粉丝点击