条条大路通罗马,在vc中编写webservice的方法有很多,例如使用gasop,soaptoolkit或者ATL。本文所讨论的是,通过微软的soap toolkit开发包,将一个COM组件转化成为一个webservice。
本文共分3个部分:
一.使用ATL开发一个COM组件
二.通过 soap toolkit 中的 wsdlgenerator 工具将 COM 组件转换成 webservice
三.部署webservice
第一部分:创建COM组件
首先,建立一个ATL工程,工程名为MyWebServiceTest.
ServerType 选择 Dynamic-link library(DLL)
Additional options 选择 Allow merging of proxy/stub code
其余的使用默认设置即可
创建完工程后,我们需要工程中添加一个COM组件,方法如下
在弹出的对话框里,选择 ATL Simple Object,然后点击确定
在接下来的对话框里面,shortName 填写 MyMath,这是我们 COM 组件的名称,其余的均使用默认设置,点击 Finish 完成添加COM组件。该组件将会提供一个IMyMath接口。
接下来,我们在 IMyMath 接口中添加一个方法 Add, 方法仅仅是简单的将 lParam1 与 lParam2 相加,并返回结果。
添加方法如下:
其中 lParam1 和 lParam2 的类型为 LONG, 并带有 属性 [in]
lResult 的类型为 LONG* ,并带有属性[out,retval]
其余保持默认设置,点击 finish 按钮完成添加
接下来,我们编辑 Add 的函数体,完成功能,相关代码如下:
- STDMETHODIMP CMyMath::Add(LONG lParam1, LONG lParam2, LONG* lResult)
- {
- // TODO: Add your implementation code here
- *lResult = lParam1 + lParam2;
- return S_OK;
- }
最后,编译工程,我们就能得到一个可供下一步使用的COM组件了。
第二部分:使用wsdlGeneraor 工具将COM组件转换成webservice
首先,从微软的网站上下载并安装soaptoolkit3.0,下载地址是
安装完成后,从开始菜单运行Wsdlgenerator,然后我们根据向导完成相关的设置
我们不需要配置文件,所以向导的第二页没有什么用,直接跳过去就行了,进入向导的第3页
在 "what would you like to name your service?" 这一项里面填写 MyMath,
向导会以此作为文件名生成相应的文件
然后点击select Com object 选择我们在上一步编译好的dll文件。
在接下来的一步,选择需要作为 webservice 的方法,没有被选中的方法在 webservice 是不可见的。
然后点击进入下一步
接下来的这一步是很关键的,它关系到我们的webservice 是否能够成功部署。
在 URI 这一栏中,我们填写 http://192.168.2.101/MyMath/
其中 192.168.2.101 是我们要部署 webservice 的机器的 IP 地址
MyMath 是 webservice 所在的虚拟目录的名称。这个名称我们会在第3部分中用到
listener type 我们选择 ASP.
然后下一步
在接下来的步骤中,我们接受默认设置
一路 next 下去,最后 finish 完成转换
向导将会生成以下文件
- mymathClient.wsml
- mymath.wsml
- mymath.WSDL
- mymath.WGen
- mymath.asp
将这些文件,连同 MyWebServiceTest.dll 拷贝到目标机器上(192.168.2.101)
第三部分:部署 webservice
首先,我们在目标机器的IIS中创建一个虚拟目录,虚拟目录名称就是 myMath,这个名字要与前面第二部分填写URI时的红色部分一致。同时保证该虚拟目录有足够的权限执行ASP
创建完虚拟目录后,将第二部分生成的6个文件拷贝到虚拟目录所对应的物理路径中,然后通过 regsvr32 注册 MyWebServiceTest.dll 组件。如果你无法完成注册,请在你的开发机器中搜索 vcredist_x86.exe 程序,将其拷贝到目标机器并运行,然后再次注册组件。
至此,该webservice已经可以正常工作了。我们可以通过建立一个C#程序来验证这个webservice。验证的部分我就先省略了。
最后希望本文能对大家有所帮助 ,谢谢。