最近需要用vs2008开发一个功能,使用非托管的c 代码来访问webservice服务,
由于之前从没使用过webservice技术,因此首先在中搜索相关
文章和代码,找到如下一篇文章:
看了这篇之后,再加上我从网上查的其它资料,现在我把开发的流程详细讲述一编。
1. 第一步需要使用sproxy.exe工具来生成代理类。在vs2008以前的版本,比如vs2005,本身就带有这个命令,但在vs2008版,已经把它给去除了。需要去下载atl_server源代码并编译产生sproxy.exe工具。
2. 为了测试webservice服务,我在网上找了一个提供webservice的网站:
它提供天气预报服务。它的wsdl文件在这个:
把这个文件保存为本地文件,名字叫weatherws.wsdl。为了方便,我假定这个文件和sproxy.exe放在同一个目录下,执行命令
sproxy.exe /wsdl weatherws.wsdl
就会在同目录下生成weatherws.h文件。
3. 打开vs2008,建立一个mfc项目webservice,添加weatherws.h文件到项目的头文件中。项目中设置atl_server的include目录路径。在webservicedlg.cpp文件中添加
#include "weatherws.h"
using namespace weatherws;
4. 这些做完以后,就可以调用webservice服务了,具体请参考附件的代码。
void cwebservicedlg::onbnclickedbutton2()
{
// todo: 在此添加控件通知处理程序代码
coinitialize(null);
hresult hr = s_ok;
cweatherwst<csoapsocketclientt<>> * m_srv = new cweatherwst<csoapsocketclientt<>>;
ccombstr citycode = ""; //参数为空默认返回上海的天气情况
ccombstr userid = "";
ccombstr * bstrout;
int size;
hr = m_srv->getweather(citycode, userid, (bstr * *)&bstrout, &size);
if(failed(hr))
{
messagebox(l"调用失败");
}
else
{
for (int i = 0; i < size; i)
{
m_weather.setsel(-1, -1);
bstrout[i].append("\r\n");
m_weather.replacesel((lpctstr)bstrout[i]);
}
}
if (m_srv != null)
delete m_srv;
couninitialize();
}
|
|
文件: | webservice.rar |
大小: | 22kb |
下载: | |
|
阅读(4008) | 评论(0) | 转发(0) |