突然要在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的具體機制的學習中去,希望以後能夠有時間去多深入的學習這些比較前沿的東西,即使沒有場合使用,學習,也是必要的。