天天看點

Visual C++下Web Service Client的實作

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