`
happmaoo
  • 浏览: 4336662 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

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

阅读更多

作者:朱金灿

来源: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.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);

分享到:
评论

相关推荐

    将 Flex 集成到 Java EE 应用程序的最佳实践(完整源代码)

    无论应用程序结构如何,我们的最终目标是向 BlazeDS 返回一个 FlexService 的实例对象。 回页首 开发 Flex 客户端 首先安装 Flex Builder 3,可以在 Adobe 的官方网站获得 30 天免费试用版。然后,...

    +Flex+集成到+Java+EE+应用程序的最佳实践(完整源代码)

    无论应用程序结构如何,我们的最终目标是向 BlazeDS 返回一个 FlexService 的实例对象。 回页首 开发 Flex 客户端 首先安装 Flex Builder 3,可以在 Adobe 的官方网站获得 30 天免费试用版。然后,...

    C#程序开发范例宝典(第2版).part08

    实例246 创建应用程序快捷方式 340 7.5 系统设置 340 实例247 设置桌面背景 341 实例248 设置系统时间 342 实例249 设置屏幕分辨率 343 7.6 系统监控 344 实例250 检测系统启动模式 344 实例251 内存使用状态...

    C#程序开发范例宝典(第2版).part12

    实例246 创建应用程序快捷方式 340 7.5 系统设置 340 实例247 设置桌面背景 341 实例248 设置系统时间 342 实例249 设置屏幕分辨率 343 7.6 系统监控 344 实例250 检测系统启动模式 344 实例251 内存使用状态...

    C#程序开发范例宝典(第2版).part13

    实例246 创建应用程序快捷方式 340 7.5 系统设置 340 实例247 设置桌面背景 341 实例248 设置系统时间 342 实例249 设置屏幕分辨率 343 7.6 系统监控 344 实例250 检测系统启动模式 344 实例251 内存使用状态...

    C#程序开发范例宝典(第2版).part02

    实例246 创建应用程序快捷方式 340 7.5 系统设置 340 实例247 设置桌面背景 341 实例248 设置系统时间 342 实例249 设置屏幕分辨率 343 7.6 系统监控 344 实例250 检测系统启动模式 344 实例251 内存使用状态...

    C#.net_经典编程例子400个

    311 7.9 程序控制 312 实例222 打开控制面板中的程序 313 实例223 添加程序托盘 314 实例224 不出现在任务栏上的程序 314 实例225 怎样调用外部的Exe文件 315 实例226 关闭外部已开启...

    程序天下:JavaScript实例自学手册

    第1章 页面特效 ...1.2 页面自动最大化 1.3 页面自动刷新 1.4 页面的后退、刷新、前进 1.5保护网页源代码 1.6 保护自己的网页不被放...22.12 JavaScript调用Web Service 22.13 用JavaScript实现编码解码 22.14 创建带属性...

    疯狂Android讲义源码

     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 ...

Global site tag (gtag.js) - Google Analytics