用前先安装SOAP安装包。
做以下引用:
#import "msxml4.dll"
#import "MSSOAP30.DLL" exclude("IStream", "ISequentialStream", "_LARGE_INTEGER","_ULARGE_INTEGER", "tagSTATSTG", "_FILETIME")
using namespace MSXML2;
using namespace MSSOAPLib30;
调用方式:
CString InvokeWebService(LPCTSTR fun,LPCTSTR param[],LPCTSTR values[])
{
ISoapSerializerPtr Serializer;
ISoapReaderPtr Reader;
ISoapConnectorPtr Connector;
if(FAILED(Connector.CreateInstance(__uuidof(HttpConnector30)))) //创建对象
{
printf("失败");
}
Connector->Property["EndPointURL"] = (_variant_t)Config->endPointURL; //wsdl路径
Connector->Connect();
Connector->Property["SoapAction"] = (_variant_t)Config->soapAction;
Connector->BeginMessage();
Serializer.CreateInstance(__uuidof(SoapSerializer30));
Serializer->Init(_variant_t((IUnknown*)Connector->InputStream));
// Build the SOAP Message.
Serializer->StartEnvelope("Soap","","");
Serializer->StartBody("");
Serializer->StartElement(fun,(_bstr_t)Config->soapAction,"","Soap"); //函数处理
for(int pi=0;pi<sizeof(param)/4;pi++)
{
Serializer->StartElement((_bstr_t)param[pi],"","","Soap");
Serializer->WriteString((_bstr_t)values[pi]); //参数处理
Serializer->EndElement();
}
Serializer->EndElement();
Serializer->EndBody();
Serializer->EndEnvelope();
Connector->EndMessage();
Reader.CreateInstance(__uuidof(SoapReader30));
Reader->Load(_variant_t((IUnknown*)Connector->OutputStream),""); //加载返回数据
//-------------------------------------------------------------------------------------//
MSXML2::IXMLDOMDocumentPtr pDoc;
MSXML2::IXMLDOMElementPtr xmlRoot;
HRESULT hr = pDoc.CreateInstance(__uuidof(MSXML2::DOMDocument30));
pDoc->loadXML(Reader->GetRpcResult()->xml);
CString temp="";
//如返回列表,可用循环
if(pDoc->childNodes->Getitem(0)->childNodes->Getlength()>0)
temp=(char*)pDoc->childNodes->Getitem(0)->childNodes->Getitem(0)->Gettext();
return temp;
}