vc中如何调用webservice? VC/MFC / 进程/线程/DLL - CSDN社...

来源:百度文库 编辑:神马文学网 时间:2024/06/06 08:58:00
用msxml+soap  
  #import   "msxml4.dll"    
  using   namespace   MSXML2;  
  #import   "C:\Program   Files\Common   Files\MSSoap\Binaries\mssoap30.dll"   \  
                          exclude("IStream",   "IErrorInfo",   "ISequentialStream",   "_LARGE_INTEGER",   \  
                                          "_ULARGE_INTEGER",   "tagSTATSTG",   "_FILETIME")  
  using   namespace   MSSOAPLib30;  
   
   
  string   GetCompanyNameFromWeb(void)  
  {  
  try  
  {  
  ISoapSerializerPtr   Serializer;  
  ISoapReaderPtr   Reader;  
  ISoapConnectorPtr   Connector;  
  //   Connect   to   the   service.  
  Connector.CreateInstance(__uuidof(HttpConnector30));  
  //Connector->Property["EndPointURL"]   =   "http://www.mainone.com/UpLoadImage.asmx";  
  Connector->Property["EndPointURL"]   =   "http://localhost/WebOfficeValidateService/Validate.asmx";  
  Connector->Connect();  
   
  //   Begin   the   message.  
  Connector->Property["SoapAction"]   =   "http://tempuri.org/GetCompanyName";  
  Connector->BeginMessage();  
   
  //   Create   the   SoapSerializer   object.  
  Serializer.CreateInstance(__uuidof(SoapSerializer30));  
   
  //   Connect   the   serializer   object   to   the   input   stream   of   the   connector   object.  
  Serializer->Init(_variant_t((IUnknown*)Connector->InputStream));  
   
  //   Build   the   SOAP   Message.  
  Serializer->StartEnvelope("","","");  
  Serializer->StartBody("");  
  Serializer->StartElement("GetCompanyName","http://tempuri.org/","","");  
  Serializer->StartElement("SerialNum","http://tempuri.org/","","");  
  Serializer->WriteString(m_strSerial.c_str());  
  Serializer->EndElement();  
  Serializer->EndElement();  
  Serializer->EndBody();  
  Serializer->EndEnvelope();  
   
  //   Send   the   message   to   the   XML   Web   service.  
  Connector->EndMessage();  
   
  //   Read   the   response.  
  Reader.CreateInstance(__uuidof(SoapReader30));  
   
  //   Connect   the   reader   to   the   output   stream   of   the   connector   object.  
  VARIANT_BOOL   bl   =   Reader->Load(_variant_t((IUnknown*)Connector->OutputStream),   "");  
   
   
  //   Display   the   result.  
  _bstr_t   bstrResult   =   Reader->RpcResult->text;  
  return   (char*)bstrResult;  
  }  
  catch(_com_error   &e)  
  {  
  return   NULL;  
  }  
  }