使用C++开发webservice客户端(下)

webserice的客户机 安装 SoapClient36g.exe,选择默认安装配置

新建vc++6.0的项目,添加下面的测试代码 TestWriteService.cpp

 

#include <stdio.h>

#import "msxml3.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;

void main()
{
	CoInitialize(NULL);
	
	ISoapSerializerPtr Serializer;
	ISoapReaderPtr Reader;
	ISoapConnectorPtr Connector;
	
	// 与Web服务连接
	Connector.CreateInstance(__uuidof(HttpConnector));
	Connector->Property["EndPointURL"] = "http://192.168.1.99:8080/WriteRecordWS/services/WriteRecordWebService";
	Connector->Connect();
	
	// 开始消息
	Connector->BeginMessage();
	
	// 创建SoapSerializer对象
	Serializer.CreateInstance(__uuidof(SoapSerializer));
	
	// 将serializer连接到connector的输入字符串
	Serializer->Init(_variant_t((IUnknown*)Connector->InputStream));
	
	// 创建SOAP消息
	Serializer->startEnvelope("","","");
	Serializer->startBody("");

	Serializer->startElement("sayHello","","","");
	
	Serializer->startElement("in0","","","");
	Serializer->writeString("frenchmay@gmail.com");
	Serializer->endElement();

	Serializer->endElement();

	Serializer->endBody();
	Serializer->endEnvelope();

	// 将该消息发送给web服务
	Connector->EndMessage();
	
	// 读取响应
	Reader.CreateInstance(__uuidof(SoapReader));
	
	// 将reader联接到connector的输出字符串
	Reader->Load(_variant_t((IUnknown*)Connector->OutputStream), "");
	
	// 显示结果
	printf("Answer: %s\n", (const char *)Reader->RPCResult->text);

	Serializer.Release();
	Connector.Release();
	Reader.Release();
	CoUninitialize();
	
} 

 

上面的代码主要功能

 

1:指定webservice的网络资源路径

http://192.168.1.99:8080/WriteRecordWS/services/WriteRecordWebService

2:构建一个soap协议报文

 

	Serializer->startElement("sayHello","","","");
	
	Serializer->startElement("in0","","","");
	Serializer->writeString("c:\\123.bin");
	Serializer->endElement();

3: 通过http协议发送请求和接受响应。

	// 将该消息发送给web服务
	Connector->EndMessage();
	
	// 读取响应
	Reader.CreateInstance(__uuidof(SoapReader));

 

主义的是调试过程中,可能会因为soap协议的格式和方法参数的问题导致请求失败。

建议使用抓包工具:分别抓取java 的webservice客户端和c++的webService客户端发送的soap包,进行比较。

 

打印结果

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值