作者:朱金灿
来源:blog.csdn.net/clever101
<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
最近做一个项目,需要使用Web Service。首先简要介绍一下Web Service(对此我也是初学者)。据微软的人介绍:Web Service能够用于任何地方、任何时候和任何设备上(感觉有点吹牛),能够在一个分布式的计算环境中动态地描述、发现和调用服务,是一种Web上的对象访问技术。这种定义有点学术意味,我用我对它的粗浅的理解来描述:从开发的角度来看,它其实是一种远程调用,这和登陆网站比较类似,比如你登陆google网站,在那个对话框中输入“牛顿”来搜索牛顿的相关信息,而对Web Service而言,就是你使用A机子,在你的客户端程序中定义一个变量string Name = “牛顿”,然后输入远程服务器的URL和搜索函数名Search(), 再CALL(URL, Search, Name),这样远程服务器就把搜索结果以xml结构的方式发给你的客户端程序,是不是有点神奇?这种调用可以显式的,也可以是隐藏的。对开发人员来说这种调用的好处是因为Web Service是基于组件的,这意味着可以跨语言平台,而且处理结果是以xml结构发回来,也大大方便了对结果的解释。
使用Web Service需要先安装IIS 5.0(XP上安装IIS 5.0,Server 2003上安装IIS 6.0,如果你使用VS 2005,同时你先安装VS 2005后安装IIS5.0,那么你需要运行一个注册命令把IIS5.0通知给VS2005,因为IIS 5.0是基于.Net 1.0,而VS 2005配置的是.Net 2.0)。
现在我们开始测试一下,具体做法是使用VS 2005建立一个Web Service,使用VC++ 6.0建立一个客户端的桌面程序,使用VS 2005建立一个Web Service,然后使用这个桌面程序调用这个Web Service。
使用VS 2005建立一个Web Service的步骤:
“新建”——〉“网站”——〉
模板选择“ASP.NET WEB服务”,位置选择“HTTP”,http://localhost/MyWeb,语言选择“Visual C#”,如下图:
添加一个WEB方法(实际上就是被远程调用的那个函数,实现两个字符串相加,输出结果字符串):
- [WebMethod]
-
publicstringStringsAdd(stringstrLeft,intstrRight)
- {
-
returnstrLeft+strRight;
- }
然后单击菜单上的“生成解决方案”,按F5调试运行,页面如下:
-
-
#import"msxml4.dll"
-
usingnamespaceMSXML2;
-
#import"C:\ProgramFiles\CommonFiles\MSSoap\Binaries\MSSOAP1.dll"\
-
exclude("IStream","IErrorInfo","ISequentialStream","_LARGE_INTEGER",\
-
"_ULARGE_INTEGER","tagSTATSTG","_FILETIME")
-
usingnamespaceMSSOAPLib;
-
同时定义对话框类三个成员变量:
- ISoapSerializerPtrSerializer;
- ISoapReaderPtrReader;
- ISoapConnectorPtrConnector;
2. 在按钮消息命令函数加入如下代码:
-
voidCCallWebMethodDlg::OnBtnCallweb()
- {
-
- CoInitialize(NULL);
-
- Connector.CreateInstance(__uuidof(HttpConnector));
-
-
Connector->Property["EndPointURL"]="http://localhost/MyWeb/Service.asmx?op=StringsAdd";
- Connector->Connect();
-
-
Connector->Property["SoapAction"]="http://tempuri.org/StringsAdd";
-
Connector->BeginMessage();
-
- Serializer.CreateInstance(__uuidof(SoapSerializer));
-
- Serializer->Init(_variant_t((IUnknown*)Connector->InputStream));
-
-
-
Serializer->startEnvelope("","","");
-
Serializer->startBody("");
-
-
Serializer->startElement("StringsAdd","http://tempuri.org/","","");
-
-
Serializer->startElement("strLeft","http://tempuri.org/","","");
-
-
Serializer->writeString("Hello,");
- Serializer->endElement();
-
-
Serializer->startElement("strRight","http://tempuri.org/","","");
-
-
Serializer->writeString("World!");
- Serializer->endElement();
- Serializer->endElement();
- Serializer->endBody();
- Serializer->endEnvelope();
-
-
Connector->EndMessage();
-
- Reader.CreateInstance(__uuidof(SoapReader));
-
-
Reader->Load(_variant_t((IUnknown*)Connector->OutputStream),"");
-
-
AfxMessageBox((constchar*)Reader->Body->xml);
- }
其中SoapAction 参数值可以通过以下方式获取:
在http://localhost/MyWeb/Service.asmx加?wsdl然后按回车,如下图所示:
程序运行结果如下图,可以看到“Hello,World!”的输出:
如果你想单纯输出Hello,World!,可以在函数后面添加下面代码:
- CStringresult1;
-
result1=(constchar*)Reader->RPCResult->text;
- AfxMessageBox(result1);
分享到:
相关推荐
无论应用程序结构如何,我们的最终目标是向 BlazeDS 返回一个 FlexService 的实例对象。 回页首 开发 Flex 客户端 首先安装 Flex Builder 3,可以在 Adobe 的官方网站获得 30 天免费试用版。然后,...
无论应用程序结构如何,我们的最终目标是向 BlazeDS 返回一个 FlexService 的实例对象。 回页首 开发 Flex 客户端 首先安装 Flex Builder 3,可以在 Adobe 的官方网站获得 30 天免费试用版。然后,...
实例246 创建应用程序快捷方式 340 7.5 系统设置 340 实例247 设置桌面背景 341 实例248 设置系统时间 342 实例249 设置屏幕分辨率 343 7.6 系统监控 344 实例250 检测系统启动模式 344 实例251 内存使用状态...
实例246 创建应用程序快捷方式 340 7.5 系统设置 340 实例247 设置桌面背景 341 实例248 设置系统时间 342 实例249 设置屏幕分辨率 343 7.6 系统监控 344 实例250 检测系统启动模式 344 实例251 内存使用状态...
实例246 创建应用程序快捷方式 340 7.5 系统设置 340 实例247 设置桌面背景 341 实例248 设置系统时间 342 实例249 设置屏幕分辨率 343 7.6 系统监控 344 实例250 检测系统启动模式 344 实例251 内存使用状态...
实例246 创建应用程序快捷方式 340 7.5 系统设置 340 实例247 设置桌面背景 341 实例248 设置系统时间 342 实例249 设置屏幕分辨率 343 7.6 系统监控 344 实例250 检测系统启动模式 344 实例251 内存使用状态...
311 7.9 程序控制 312 实例222 打开控制面板中的程序 313 实例223 添加程序托盘 314 实例224 不出现在任务栏上的程序 314 实例225 怎样调用外部的Exe文件 315 实例226 关闭外部已开启...
第1章 页面特效 ...1.2 页面自动最大化 1.3 页面自动刷新 1.4 页面的后退、刷新、前进 1.5保护网页源代码 1.6 保护自己的网页不被放...22.12 JavaScript调用Web Service 22.13 用JavaScript实现编码解码 22.14 创建带属性...
1.5.5 应用程序权限说明 29 1.6 Android应用的基本组件 介绍 31 1.6.1 Activity和View 31 1.6.2 Service 32 1.6.3 BroadcastReceiver 32 1.6.4 ContentProvider 32 1.6.5 Intent和IntentFilter 33 ...