热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

webservice使用vs2005生成代理类方式访问与直接写soap方式访问的区别?

方法一:使用vs2005自带功能,添加web引用使用类似代码CoInitialize(NULL);HRESULThrS_OK;inthiResult;CComB
方法一:使用vs2005自带功能,添加web引用


使用类似代码
CoInitialize(NULL);
HRESULT hr = S_OK;
int hiResult;
CComBSTR username = Globle_User;
CComBSTR password = Globle_Pass;

CService* debug = new CService; // 代理对象

// 可以调用SetUrl动态设置Web服务地址
CString url;
url = L"http://" + NetAddress + L"/service.asmx?op=login";
debug->SetUrl(url);

hr = debug->login(username, password, &hiResult); //注意,返回值是以指针形式反回的

if(FAILED(hr))
{
}
delete debug;
CoUninitialize();

方法二:直接使用soap方法访问webservice
ISoapSerializerPtr   Serializer;
ISoapReaderPtr   Reader;
ISoapConnectorPtr   Connector;
IDataEncoderFactoryPtr encoderFc;
HRESULT hr;

CoInitialize(NULL);
if(FAILED(Connector.CreateInstance(__uuidof(HttpConnector30))))    //创建对象
{
AfxMessageBox(L"soap失败");
return -1;
}
CString url = L"http://" + NetAddress + L"/service.asmx?wsdl";
Connector->Property["EndPointURL"] = (LPCTSTR)url;
Connector->Connect();

//   Begin  the   message.  //消息体

Connector->Property["SoapAction"]   = "http://tempuri.org/login"; //函数体参数
Connector->BeginMessage();

Serializer.CreateInstance(__uuidof(SoapSerializer30));
Serializer->Init(_variant_t((IUnknown*)Connector->InputStream));

//   Build  the   SOAP   Message.

try{
Serializer->StartEnvelope("","","");
Serializer->StartBody("");
Serializer->StartElement("login","http://tempuri.org/","","");
Serializer->StartElement("ID","http://tempuri.org/","NONE","");
Serializer->WriteString((LPCTSTR)Globle_User);
Serializer->EndElement();

Serializer->StartElement("pass","http://tempuri.org/","NONE","");
Serializer->WriteString((LPCTSTR)Globle_Pass);
Serializer->EndElement();
Serializer->EndElement();
Serializer->EndBody();
hr = Serializer->EndEnvelope();

Connector->EndMessage();
Reader.CreateInstance(__uuidof(SoapReader30));

Reader->Load(_variant_t((IUnknown*)Connector->OutputStream),"");  //加载返回数据


----------------------------------------------------------------------

第一种方法跟踪调试进去发现也是使用soap,只是微软使用atlsoap给封装了,但为啥有的电脑无法使用第一种方法,第二种却可以?难道第一种方法中调用的函数缺少组件支持了?
不过第二种方法一般要安装soap开发包才可以正常调用,第一种则不用。

8 个解决方案

#1


为啥没有回复。

#2


该回复于2014-08-15 09:15:14被管理员删除

#3


uppuup

#4


一个是生成包装类,都给你封装好了,你就像使用C++类的方式调用接口等
第二个是根据soap协议,调用对应的API来完成这个过程

#5


引用 4 楼 oyljerry 的回复:
一个是生成包装类,都给你封装好了,你就像使用C++类的方式调用接口等
第二个是根据soap协议,调用对应的API来完成这个过程


多谢回复
我调试看了其实底层都是使用soap的,为啥第二种方法在大多数情况下客户端都要安装soap包,第一种则不用。

#6


本帖最后由 oyljerry 于 2014-08-15 17:44:59 编辑
引用 5 楼 darkduck9989 的回复:
Quote: 引用 4 楼 oyljerry 的回复:

一个是生成包装类,都给你封装好了,你就像使用C++类的方式调用接口等
第二个是根据soap协议,调用对应的API来完成这个过程


多谢回复
我调试看了其实底层都是使用soap的,为啥第二种方法在大多数情况下客户端都要安装soap包,第一种则不用。

第一种依赖编译器封装的SOAP类库,第二种依赖SOAP开发包

#7


该回复于2014-08-16 08:48:00被管理员删除

#8


好的,多谢版主的回复,有时间再具体研究下

推荐阅读
  • 本文通过对OkHttp源码的详细解读,旨在帮助读者理解其核心执行流程,特别是同步与异步请求的处理方式。文中不仅涵盖了基本的使用示例,还深入探讨了OkHttp的核心功能——拦截器链的工作原理。 ... [详细]
  • 使用URLHttpConnection获取并展示图片至ImageView的方法
    本文介绍如何通过URLHttpConnection方式从网络加载图片,并将其显示在Android应用的ImageView组件上。包括布局文件和Java代码的具体实现。 ... [详细]
  • 如何在Java中高效构建WebService
    本文介绍了如何利用XFire框架在Java中高效构建WebService。XFire是一个轻量级、高性能的Java SOAP框架,能够简化WebService的开发流程。通过结合MyEclipse集成开发环境,开发者可以更便捷地进行项目配置和代码编写,从而提高开发效率。此外,文章还详细探讨了XFire的关键特性和最佳实践,为读者提供了实用的参考。 ... [详细]
  • 将generic.list转换为ArrayOfInt,以便通过SOAP传输到Web服务我正在尝试使用SOAP协议将一个通用的整数列表从客户端应用程序传递给Web服务。当我尝试将列表 ... [详细]
  • 利用Executor框架管理线程池
    本文介绍了如何使用Executor框架来管理和创建线程池,包括不同的线程池类型及其应用场景,以及如何通过Executors工厂类创建不同类型的Executor实例。 ... [详细]
  • PHP 5.4.8 编译安装指南
    本文详细介绍了如何在Linux环境下编译安装PHP 5.4.8,并配置为FastCGI模式运行。包括所需依赖包的安装、源代码下载、编译配置及启动服务等步骤。 ... [详细]
  • Web网络基础
    目录儿1使用HTTP协议访问Web2HTTP的诞生2.1因特网的起源2.2互联网、因特网与万维网2.3万维网与HTTP3网络基础TCPIP3.1TCPIP协议族3.2TCPIP的分 ... [详细]
  • 本文详细介绍了在CentOS 6.5 64位系统上使用阿里云ECS服务器搭建LAMP环境的具体步骤。首先,通过PuTTY工具实现远程连接至服务器。接着,检查当前系统的磁盘空间使用情况,确保有足够的空间进行后续操作,可使用 `df` 命令进行查看。此外,文章还涵盖了安装和配置Apache、MySQL和PHP的相关步骤,以及常见问题的解决方法,帮助用户顺利完成LAMP环境的搭建。 ... [详细]
  • 序列化概念
    一、概述序列化是将对象状态转换为可保持或传输的格式的过程。与序列化相对的是反序列化,它将流转换为对象。这两个过程结合起来,可以轻松地存储和传输数据。.NETFramework提供两 ... [详细]
  • 计算机视觉中的行为识别:步态分析的ReID应用
    本文介绍了一项基于步态的行为识别(ReID)项目,通过步态特征实现个体身份的准确识别。文中展示了项目的基本原理、特征提取方法及其实现效果。 ... [详细]
  • 微服务架构详解及其入门指南
    本文详细介绍了微服务的基本概念、发展历程、与传统架构的区别及优势,并探讨了适合采用微服务架构的场景。此外,文章还深入分析了几个主流的微服务开发框架,特别是Spring Cloud的组成和特点。 ... [详细]
  • REST与RPC:选择哪种API架构风格?
    在探讨REST与RPC这两种API架构风格的选择时,本文首先介绍了RPC(远程过程调用)的概念。RPC允许客户端通过网络调用远程服务器上的函数或方法,从而实现分布式系统的功能调用。相比之下,REST(Representational State Transfer)则基于资源的交互模型,通过HTTP协议进行数据传输和操作。本文将详细分析两种架构风格的特点、适用场景及其优缺点,帮助开发者根据具体需求做出合适的选择。 ... [详细]
  • SSAS入门指南:基础知识与核心概念解析
    ### SSAS入门指南:基础知识与核心概念解析Analysis Services 是一种专为决策支持和商业智能(BI)解决方案设计的数据引擎。该引擎能够为报告和客户端应用提供高效的分析数据,并支持在多维数据模型中构建高性能的分析应用。通过其强大的数据处理能力和灵活的数据建模功能,Analysis Services 成为了现代 BI 系统的重要组成部分。 ... [详细]
  • 《精通ArcGIS Server 应用与开发》——2.4 ArcGIS Server的安装与配置
    本节书摘来自异步社区《精通ArcGISServer应用与开发》一书中的第2章,第2.4节,作者:何正国,杜娟,毛海亚更多章节内容可以访问云栖社区“异步社 ... [详细]
  • 之前学习过get信息的方法,就是通过接口得到数据,然后对数据进行处理json处理和xml处理最近学习了post,所以小小的总结一下先说一下使用系统的NSURLConnectio ... [详细]
author-avatar
陌-天佑_807
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有