VC通过SOAP调用WebService

用前先安装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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值