用vc改写sample5的例子:
HRESULT hr;
IWSDLReaderPtr WReader;
try{
hr = WReader.CreateInstance(__uuidof(WSDLReader30));
}
catch (_com_error e) {
MessageBox(e.ErrorMessage());
}
WReader->SetProperty("LoadOnServer",false);
WReader->SetProperty("ServerHTTPRequest",true);
WReader->Load(WSDL.AllocSysString(),"");
long Fetched;
IEnumWSDLServicePtr ServiceEnumerator;
IWSDLServicePtr Service;
WReader->GetSoapServices(&ServiceEnumerator);
ServiceEnumerator->Next(1,&Service,&Fetched);
ASSERT(Fetched ==1);
IEnumWSDLPortsPtr PortEnumerator;
IWSDLPortPtr Port;
Service->GetSoapPorts(&PortEnumerator);
PortEnumerator->Next(1,&Port,&Fetched);
ASSERT(Fetched ==1);
IEnumWSDLOperationsPtr OperationEnumerator;
IWSDLOperationPtr Operation;
Port->GetSoapOperations(&OperationEnumerator);
OperationEnumerator->Find(opName.AllocSysString(),&Operation);
IEnumSoapMappersPtr MapperEnumerator;
ISoapMapperPtr Mapper, Result;
Operation->GetOperationParts(&MapperEnumerator);
MapperEnumerator->Next(1,&Mapper,&Fetched);
while(Fetched ==1)
{
if((_bstr_t)(Mapper->ElementName)==(_bstr_t)"NumberOne")
Mapper->ComValue=textA;
if((_bstr_t)Mapper->ElementName==(_bstr_t)"NumberTwo")
Mapper->ComValue=textB;
if((_bstr_t)Mapper->ElementName==(_bstr_t)"Result")
Result = Mapper;
MapperEnumerator->Next(1,&Mapper,&Fetched);
}
ISoapSerializerPtr Serializer;
ISoapReaderPtr Reader;
ISoapConnectorPtr Connector;
try{
hr = Reader.CreateInstance(__uuidof(SoapReader30));
hr = Connector.CreateInstance(__uuidof(HttpConnector30));
hr = Serializer.CreateInstance(__uuidof(SoapSerializer30));
}
catch (_com_error e) {
MessageBox(e.ErrorMessage());
}
hr = Serializer->Init(_variant_t((IUnknown*)Connector->InputStream));
Connector->ConnectWSDL(Port);
Connector->BeginMessageWSDL(Operation);
Serializer->StartEnvelope("","","");
Serializer->StartBody("");
try{
hr = Operation->Save(Serializer,true);
}
catch (_com_error e) {
MessageBox(e.ErrorMessage());
}
Serializer->EndBody();
Serializer->EndEnvelope();
Connector->EndMessage();
Reader->Load(_variant_t((IUnknown*)Connector->OutputStream), "");
try{
Operation->Load(Reader,true);
}
catch (_com_error e) {
MessageBox(e.ErrorMessage());
}
long temp1 = (long)Result->ComValue;
执行到hr = Operation->Save(Serializer,true);时,说参数错误。
执行Reader->Load(_variant_t((IUnknown*)Connector->OutputStream), "");也报错。
我是按照vb的例子改写的。
--
FROM 159.226.22.27