VC++6.0调用Web Services(可以是c#,java,vc++.net等提供的服务都可以)!

转载 2011年03月28日 19:43:00

本文主要讲述VC++6.0调用Web Services的方法,其中web services可以是c#,java,vc++.net等提供的服务都可以调用!主要的大致过程如下:

     需要装Soap Toolkit3.0,电脑上一般自带Soap Toolkit1.0,以下代码在VC++6.0中测试成功。

在stdafx.h加上
//////////////////////////////////////////////////////////WEB_SERVICE
#include <stdio.h>
#import "msxml4.dll"
using namespace MSXML2;
#import "C:/Program Files/Common Files/MSSoap/Binaries/mssoap30.dll" /
 exclude("IStream", "IErrorInfo", "ISequentialStream", "_LARGE_INTEGER", /
"_ULARGE_INTEGER", "tagSTATSTG", "_FILETIME")
using namespace MSSOAPLib30;
//////////////////////////////////////////////////////////////////////END

SoapTestDlg.h里面

/////////////
CString BeginSoap(CString,CString,CString);
ISoapConnectorPtr SoapConnector;
ISoapSerializerPtr Serializer;
ISoapReaderPtr Reader;

///////////////////////////////////////////

 SoapTestDlg.cpp里面

///////////
void CSoapTestDlg::OnButton1()
{
CString str,strWord;
GetDlgItem(IDC_EDIT1)->GetWindowText(strWord);
str=BeginSoap("EnglishTOChinese",strWord,"http://www.webservicex.net/translateservice.asmx");
AfxMessageBox(str);
}

CString CSoapTestDlg::BeginSoap(CString UserName,CString Password,CString WebUrl)
{
 HRESULT hr;
 try
 {
  //创建SoapConnector类的对象
  SoapConnector.CreateInstance(__uuidof(HttpConnector30));
  
  //指定Web服务的地址
  SoapConnector->Property ["EndPointURL"] =(LPSTR)(LPCTSTR)WebUrl;
  
  //与Web服务连接
  hr=SoapConnector->Connect();
  if(FAILED(hr)) return "";
  
  //指定Web服务完成的操作
  SoapConnector->Property ["SoapAction"] = _T("http://www.webservicex.net/Translate");
  
  //准备发送消息给Web服务
  SoapConnector->BeginMessage();
  
  // 创建SoapSerializer对象
  Serializer.CreateInstance(__uuidof(SoapSerializer30));
  
  // 将serializer连接到connector的输入字符串
  Serializer->Init(_variant_t((IUnknown*)SoapConnector->InputStream));
  
  // 创建SOAP消息
  Serializer->StartEnvelope("soap","","");
  Serializer->StartBody("");
  
  Serializer->StartElement("Translate","http://www.webservicex.net","","soap");
  
  Serializer->StartElement("LanguageMode","","","soap");
  Serializer->WriteString((_bstr_t)(LPCTSTR)UserName);
  Serializer->EndElement();
  
  Serializer->StartElement("Text","","","soap");
  Serializer->WriteString((_bstr_t)(LPCTSTR)Password);
  Serializer->EndElement();
  
  Serializer->EndElement();
  
  Serializer->EndBody();
  Serializer->EndEnvelope();  
  
  //消息真正地发给Web服务
  hr=SoapConnector->EndMessage();
  if(FAILED(hr)) return "";
  
  // 读取响应
  Reader.CreateInstance(__uuidof(SoapReader30));
  
  // 将reader联接到connector的输出字符串
  Reader->Load(_variant_t((IUnknown*)SoapConnector->OutputStream), _T(""));
  
  return CString((const char *)Reader->RpcResult->text);
 }
 catch (_com_error e)
 {
  return (CString)(char*)e.Description();
 }
}

//////////////////////////////////////////////////////////////////////OVER///////////////////////////

当然用Soap Toolkit1.0调用也可以,大致代码跟上面的一样,需要改动的有:

1.包含库文件代码改为下面

#import "msxml4.dll"
using namespace MSXML2;

#import "C:/Program Files/Common Files/MSSoap/Binaries/MSSOAP1.dll" /
exclude("IStream", "ISequentialStream", "_LARGE_INTEGER", /
"_ULARGE_INTEGER", "tagSTATSTG", "_FILETIME")

using namespace MSSOAPLib;

2. 函数代码上包含30数字的全将30去掉,如

SoapConnector.CreateInstance(__uuidof(HttpConnector));

Serializer.CreateInstance(__uuidof(SoapSerializer));
Reader.CreateInstance(__uuidof(SoapReader));

3.将

Serializer->StartElement("Text","","","soap");
  Serializer->WriteString((_bstr_t)(LPCTSTR)Password);
  Serializer->EndElement();
  
  Serializer->EndElement();
  
  Serializer->EndBody();
  Serializer->EndEnvelope();  
改为:(第一个单词小写)

Serializer->writeString("laghari78");
Serializer->endElement();
Serializer->endElement();
Serializer->endBody();
Serializer->endEnvelope();

/////////////////////////////////////////OK/////////////////////////////////////////////////

相关文章推荐

VC++调用天气预报Web services方法

首先需要下载gsoap_2.8.14.zip工具,该工具的主要作用是将服务提供者的WSDL(Web Service描述语言)转化为C++头文件和源文件。 1、生成头文件 使用wsdl2h命令生成头文件...
  • cabmail
  • cabmail
  • 2015年06月28日 13:26
  • 425

.NET转VC++6.0小工具

  • 2007年12月09日 14:31
  • 140KB
  • 下载

VC++6.0开发Windows服务程序。

1. 首先运行VC++6,选择新建工程,在出现的下面窗口中选择”ATL COM AppWizard“,并选择工程放置位置和相应的工程名,然后选择确定按钮。 此时出现如下图窗口界面,在此界面中选择”...
  • g710710
  • g710710
  • 2012年02月21日 08:50
  • 892

VC++ .NET UI同步(使用Invoke托管方法),异步线程调用UI

花了好几天才学会,之前的代码都是C#的,无法直接使用. 1.首先定义并声明托管 delegate void testUI1(String ^ptr); //定义一个UI托管 delegate ...
  • cp1300
  • cp1300
  • 2015年01月28日 22:04
  • 1246

VC++调用webservice (不使用.NET的托管技术)

正在看着AV(AreCont)SDK的时候,老大突然让我转到soap上,原因是刚进公司的我,第一项任务便是研究ONVIF(so many specifications),当然主要的还是看core ...

VC++调用VB.NET缩写的COM

现在COM组件的使用越来越广泛,在各个程序中调用COM组件我想大家都遇到过,这篇文章就是关于COM组件的编写和调用的,主要包含了使用VC6.0编写和调用COM组件,VS2005中使用VB编写和调用CO...

VC++ .NET 动态加载DLL,使用反射方式Invoke委托调用

每次新产品都需要配一个上位机,并且本地配置与远程配置都需要重新开放配置程序,因此就想办法把配置模块变为一个动态的控件,一次开发后续2个程序都可以同时使用,使用了很多种方法,最后还是使用反射方式. ...
  • cp1300
  • cp1300
  • 2015年10月09日 21:50
  • 1080

解开VC++调用.Net DLL的神秘面纱

这段时间有个项目是需要使用vc++的程序访问.Net的类,在网上搜过很多文章,大致有两个方法:     将.Net程序编译成COM,并让C++代码访问COM组件进行调用。     另一个方...

解开VC++调用.Net DLL的神秘面纱

点击打开链接这段时间有个项目是需要使用vc++的程序访问.Net的类,在网上搜过很多文章,大致有两个方法:     将.Net程序编译成COM,并让C++代码访问COM组件进行调用。     另一...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:VC++6.0调用Web Services(可以是c#,java,vc++.net等提供的服务都可以)!
举报原因:
原因补充:

(最多只允许输入30个字)