Visual C++下Web Service Client的实现

来源:互联网 发布:toupview图像分析软件 编辑:程序博客网 时间:2024/06/06 00:13
 突然要在Visual C++ 6.0下调用Web Service,翻翻资料,看看帮助,先做一个例程。

在Visual C++ 6.0下调用Web Service时,由于Visual C++里没有现成的类库,所以还要安装一个微软的开发包SoapToolkit20.exe,体积不大就1.44M,安装完就可以用。

Server Side

操作系统:RedHat Linux 8.0

服务器   :Tomcat + Axis 1.X

作为服务器端的Web Service容器,Axis的表现很出色的,IBM的重量级Websphere Application server就集成了Axis。这个Linux + Tomcat 4.x+ Axis1.x 的组合,相信作为实验平台时足够了。如果操作系统、容器的各项指标优化得得当,那么这个组合还是可以承载一定数量级的压力的。

Client Side

操作系统:Windows 2000 Advance Server with service pack 6

IDE      : Visual C++ 6 with service pack 6 English Edition

Web Service绝大多数都是被运用在B/S构架下的应用的,但是Web Service肯定会在C/S得应用下出现。好了废话不说,开始吧。

必要说明:Server Side的Web Service暴露了一个方法,该方法有两个参数。

开发语言:java

IDE       :Websphere Develop Studio 5

暴露的接口:

GetSomeMessage(String param_one,String param_two);

//引入必要的动态连结库,使用命名空间,第一步做的事情还真多呀!

#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;

接下来,生命一个函数:

CString GetSoapMessage(CString paramone,CString paramtwo);

函数的具体内容:

CString CSomeClass::GetSoapMessage(CString paramone,CString paramtwo)

{

 ISoapSerializerPtr Serializer;
 ISoapReaderPtr Reader;
 ISoapConnectorPtr Connector;


 //实例化一个连接器
 Connector.CreateInstance(__uuidof(HttpConnector));

 //连接器指针的属性,指向一个Web Service端点
 Connector->Property["EndPointURL"]="
http://SOME_IP:8080/axis/services/Hello";
 
 Connector->Connect();

//获得一个方法
 
 Connector->Property["SoapAction"]="getName";

//开始获取信息
 Connector->BeginMessage();
 
 Serializer.CreateInstance(__uuidof(SoapSerializer));
 Serializer->Init(_variant_t((IUnknown*)Connector->InputStream));
 Serializer->startEnvelope("","","");
 Serializer->startBody("");
 Serializer->startElement("getName","
http://SOME_IP:8080/axis/services/Hello?method=getName","","m");
 //传递第一个参数
 Serializer->startElement("nameone","","","");

 Serializer->writeString((_bstr_t)nameone);
 Serializer->endElement();

//传递第二个参数

 Serializer->startElement("nametwo","","","");
 Serializer->writeString((_bstr_t)nametwo);
 Serializer->endElement();
 
 Serializer->endElement();
 Serializer->endBody();
 Serializer->endEnvelope();
 Connector->EndMessage();

//实例化一个信息读取器
 Reader.CreateInstance(__uuidof(SoapReader));

//读取数据流
 Reader->Load(_variant_t((IUnknown*)Connector->OutputStream),"");
CString message;
 message.Format("Return Message is : %s",(const char*)Reader->RPCResult->text);

return message;

}

好了,现在可以直接调用该函数进行Web Service的访问了。

历时了好几天才把这篇文章写完呀,好辛苦!!

总是被一些事情绊住,没有办法专心的投入到Visual C++的Web Service的具体机制的学习中去,希望以后能够有时间去多深入的学习这些比较前沿的东西,即使没有场合使用,学习,也是必要的。

原创粉丝点击