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

相关文章推荐

Qt mvc 三

前面两节讲的model是一维的,这次开始二维的也就是我们常说的Table,相对与list,我们多了一个列的概念。 下面讲解一个例子。我先说明一下我们这个例子,在程序目录下,我们有一个文本文件,其中存...

Qt中的MVC (模型/视图结构)

其实Qt中的MVC并不叫MVC,而是叫“MVD”,Qt中没有Controller的说法,而是使用了另外一种抽象: Delegate (委托) ,其行为和传统的MVC是相同的。

Qt之MVC使用

1、QTableView#if 0 QStandardItemModel *model = new QStandardItemModel; model->setColumnCount(...

ECMAScript 2015官方文档翻译(一)

以下内容为翻译软件结合自己人工翻译,如有错误欢迎指正。 Introduction       这个ECMA标准定义了ECMAScript2015语言。这是第六版的ECMAScript语言规范。自1...

Qt5MVC模式(一)

Qt5MVC模式By Xchen 20160627MVC设计模式 起源于smalltalk的一种与用户界面设计相关的设计模式。 作用:有效的分离数据和用户界面。 组成:模型model(表示数据)、...

Qt creator创建纯C/C++源代码

Qt creator创建纯C/C++源代码By Xchen 20160707这段时间在学习算法和数据结构方面的知识,所以就牵扯到使用一种IDE编辑代码,由于之前一直使用Qt creator进行GUI程...

ECMAScript(一)

ECMAScript简单介绍(一)By Xchen 20160627ECMAScript简单介绍一By Xchen 20160627 语法 原始类型 变量 类型转换

Qt mvc二

继续上次的例子,对于list才说只有行,讨论列是没有意义的。     bool insertRows(int row, int count, const QModelIndex &parent); ...

Qt mvc学习一

mvc是经典的三层结构,将数据,视图和逻辑分离。Qt中的Model/View框架,实现了这个模式。在Qt中这个模式设计到三个类,model类,view类和delegate类。model类保存数据,vi...

Qt中MVC框架详解

Qt包含一组使用模型/视图结构的类,可以用来管理数据并呈现给用户。这种体系结构引入的分离使开发人员更灵活地定制项目,并且提供了一个标准模型的接口,以允许广泛范围的数据源被使用到到现有的视图中。 模型 ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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