桌面程序调用Web Service应用实例

本文通过实战演示如何使用VS2005创建WebService,并利用VC++6.0搭建的桌面应用程序进行调用。详细介绍了搭建环境、创建WebService及调用流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

作者:朱金灿

来源:blog.youkuaiyun.com/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.0XP上安装IIS 5.0Server 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方法(实际上就是被远程调用的那个函数,实现两个字符串相加,输出结果字符串):

  1. [WebMethod]
  2. publicstringStringsAdd(stringstrLeft,intstrRight)
  3. {
  4. returnstrLeft+strRight;
  5. }

然后单击菜单上的“生成解决方案”,按F5调试运行,页面如下:

可以看到上面已经有了一个StringsAdd的链接,单击进去,可以看到里面有两个输入参数框和一个调用按钮,如下图:

下面我们使用VC++ 6.0建一个对话框程序CallWebMethod来调用这个WEB方法,界面如下:

  1. //注意组件的位置根据自己的系统环境来取得
  2. #import"msxml4.dll"
  3. usingnamespaceMSXML2;
  4. #import"C:\ProgramFiles\CommonFiles\MSSoap\Binaries\MSSOAP1.dll"\
  5. exclude("IStream","IErrorInfo","ISequentialStream","_LARGE_INTEGER",\
  6. "_ULARGE_INTEGER","tagSTATSTG","_FILETIME")
  7. usingnamespaceMSSOAPLib;

同时定义对话框类三个成员变量:

  1. ISoapSerializerPtrSerializer;
  2. ISoapReaderPtrReader;
  3. ISoapConnectorPtrConnector;

2. 在按钮消息命令函数加入如下代码:

  1. voidCCallWebMethodDlg::OnBtnCallweb()
  2. {
  3. //TODO:Addyourcontrolnotificationhandlercodehere
  4. CoInitialize(NULL);
  5. //与Web服务连接
  6. Connector.CreateInstance(__uuidof(HttpConnector));
  7. //http://localhost/MyWeb/Service.asmx?op=StringsAdd为调用页面
  8. Connector->Property["EndPointURL"]="http://localhost/MyWeb/Service.asmx?op=StringsAdd";
  9. Connector->Connect();
  10. //开始消息,http://tempuri.org/StringsAdd为响应函数,
  11. Connector->Property["SoapAction"]="http://tempuri.org/StringsAdd";
  12. Connector->BeginMessage();//启动消息句柄
  13. //创建SoapSerializer对象
  14. Serializer.CreateInstance(__uuidof(SoapSerializer));
  15. //将serializer连接到connector的输入字符串
  16. Serializer->Init(_variant_t((IUnknown*)Connector->InputStream));
  17. //////////////////////
  18. //创建SOAP消息
  19. Serializer->startEnvelope("","","");
  20. Serializer->startBody("");
  21. //找到WEB函数名
  22. Serializer->startElement("StringsAdd","http://tempuri.org/","","");
  23. //找到第一个参数
  24. Serializer->startElement("strLeft","http://tempuri.org/","","");
  25. //输入第一个参数值
  26. Serializer->writeString("Hello,");
  27. Serializer->endElement();
  28. //找到第二个参数
  29. Serializer->startElement("strRight","http://tempuri.org/","","");
  30. //输入第二个参数值
  31. Serializer->writeString("World!");
  32. Serializer->endElement();
  33. Serializer->endElement();
  34. Serializer->endBody();
  35. Serializer->endEnvelope();
  36. //将该消息发送给web服务
  37. Connector->EndMessage();//将消息送往服务器
  38. //读取响应
  39. Reader.CreateInstance(__uuidof(SoapReader));
  40. //将reader联接到connector的输出字符串
  41. Reader->Load(_variant_t((IUnknown*)Connector->OutputStream),"");
  42. //显示结果
  43. AfxMessageBox((constchar*)Reader->Body->xml);//以xml格式输出
  44. }

其中SoapAction 参数值可以通过以下方式获取:

http://localhost/MyWeb/Service.asmx?wsdl然后按回车,如下图所示:

程序运行结果如下图,可以看到“Hello,World!”的输出:

如果你想单纯输出Hello,World!,可以在函数后面添加下面代码:

  1. CStringresult1;
  2. result1=(constchar*)Reader->RPCResult->text;
  3. AfxMessageBox(result1);

定义: 这是一款桌面级的WEB服务器 包含一个静态的http服务器与一个js脚本引擎 可以展示静态的网页与生成简单的动态页面 适合个人在windows服务器上面简单的建立http服务 支持情况: 静态http session application(仅仅能存取文本) 服务端执行的js脚本 数据库访问(反正ODBC支持的库都支持) 自定义的com组件引用 简易说明: 1 建立站点 打开编辑 设置 输入站点名称与路径 点击添加即可建立一个站点 如: myweb c: www 注意路径要以 结尾 在站点根目录下添加filter sjs与endfilter sjs(这是两个必须的过滤器 如无需写代码放两个空文件即可) 2 静态资源与动态页面 在server sjs里的server execFileTypes定义可以配置将哪些文档类型作为动态页面 当请求静态资源时会直接返回资源 当请求一个动态页面时 请求会依次在filter sjs 请求页面 endfilter sjs 进行转发 当然也可以在filter sjs里写代码来终止转发 动态页面中如果文档类型为 sjs服务器将识别为纯的服务端执行js脚本(好比servlet什么的) 在其他类型的动态页面文档中 目前有3种类型嵌入标签可用: <%c %>标签表示嵌入一段服务端执行js脚本 如:<body><%c response responseText+ "hello js"%>< body> 将返回页面<body>hello js< body> <%i %>标签表示引用资源 如:<%i src "parts part htm"%> <% %>标签表示插值 如:<body><% "hello js"%>< body> 将返回页面<body>hello js< body> 3 com组件引用 为了让web应用有更多功能扩展 该服务器可以在脚本中引用其他com组件 这里有2种引用方法 一种方法在设置里面添加引用变量名 组件名 引用类型;来添加其他com组件的引用 组件名写成 组件工程名 组件类名 形式 就像使用CreateObject时一样 引用类型可写sing与muti 其中sing为所有请求共用一个组件实例对象 muti为每个请求引用独立的组件实例对象 另外还可以在代码里使用objectLoader loadComObject attr comNm 来添加组件引用 attr为引用变量名 comNm为组件名 注意:一个新的组件在引用前应先用regsvr32 dll注册">定义: 这是一款桌面级的WEB服务器 包含一个静态的http服务器与一个js脚本引擎 可以展示静态的网页与生成简单的动态页面 适合个人在windows服务器上面简单的建立http服务 支持情况: 静态http session application(仅仅能存取文本 [更多]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值