在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的具体机制的学习中去,希望以后能够有时间去多深入的学习这些比较前沿的东西,即使没有场合使用,学习,也是必要的。