vc中如何调用webservice? VC/MFC / 进程/线程/DLL

来源:百度文库 编辑:神马文学网 时间:2024/05/13 06:28:32
用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;
}
}