C++ MSSOAP передача данных в SOAP request
От: Ayreon  
Дата: 15.11.07 15:20
Оценка:
Мне методами ISoapSerializer надо сгенерировать такой запрос

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<GetUpdateFileLis xmlns="http://10.35.5.115/RA/WebServices/">
<UpdateProductVersion>int</UpdateProductVersion>
</GetUpdateFileLis>
</soap:Body>
</soap:Envelope>

Мой код:

ISoapSerializerPtr Serializer;
ISoapReaderPtr Reader;
ISoapConnectorPtr Connector;

HRESULT hr = S_OK;

hr = Connector.CreateInstance(__uuidof(HttpConnector30));

Connector->Property["EndPointURL"] = (LPCSTR)lpWebServiceUrl;

hr = Connector->Connect();

Connector->Property["SoapAction"] = _T("http://10.35.5.115/RA/WebServices/GetUpdateFileLis");


hr = Connector->BeginMessage();

hr = Serializer.CreateInstance(__uuidof(SoapSerializer30));

hr = Serializer->Init(_variant_t((IUnknown*)Connector->InputStream));

hr = Serializer->StartEnvelope("soap",_T("NONE"),_T(""));
hr = Serializer->StartBody("");
hr = Serializer->StartElement("GetUpdateFileLis",
_T("http://10.35.5.115/RA/WebServices/"),
_T("NONE"),_T(""));

hr = Serializer->StartElement("UpdateProductVersion",
_T(""),
_T("NONE"),_T(""));
hr = Serializer->SoapAttribute("xsi:type","","xsd:int","");
hr = Serializer->WriteString("100");
hr = Serializer->EndElement();
hr = Serializer->EndElement();
hr = Serializer->EndBody();
hr = Serializer->EndEnvelope();

hr = Connector->EndMessage();
даллее — Connector->EndMessage()генерирует ексепшн

если я передаю просто как string то возвращается

incorrect syntax
Re: C++ MSSOAP передача данных в SOAP request
От: Константин Л. Франция  
Дата: 15.11.07 17:51
Оценка:
Здравствуйте, Ayreon, Вы писали:

[]


A>   hr = Serializer->SoapAttribute("xsi:type","","xsd:int","");


по-моему это лишнее


[]
Re[2]: C++ MSSOAP передача данных в SOAP request
От: Ayreon85 Украина  
Дата: 16.11.07 10:39
Оценка:
Здравствуйте, Константин Л., Вы писали:

КЛ>Здравствуйте, Ayreon, Вы писали:


КЛ>[]



КЛ>
A>>   hr = Serializer->SoapAttribute("xsi:type","","xsd:int","");
КЛ>


КЛ>по-моему это лишнее



КЛ>[]

Есть Soap request:

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<RegisterServer xmlns="http://10.35.5.115/RA/WebServices/">
<ComputerName>string</ComputerName>
<IPAddress>string</IPAddress>
</RegisterServer>
</soap:Body>
</soap:Envelope>


Код для него С++ MSSOAP


hr = Serializer->StartEnvelope("soap",_T("NONE"),_T(""));
hr = Serializer->StartBody("");
hr = Serializer->StartElement("RegisterServer",
_T("http://10.35.5.115/RA/WebServices/"),
_T("NONE"),_T(""));

//-----------------------------------------------
hr = Serializer->StartElement(_T("ComputerName"),
_T(""),
_T("NONE"),_T(""));

hr = Serializer->WriteString(_T("Test"));

hr = Serializer->EndElement();


hr = Serializer->StartElement(_T("IPAddress"),
_T(""),
_T("NONE"),_T(""));

hr = Serializer->WriteString(_T("10.10.10.10"));

hr = Serializer->EndElement();

//------------------------------------------------


hr = Serializer->EndElement();
hr = Serializer->EndBody();
hr = Serializer->EndEnvelope();


есть у меня Soap response:


<?xml version="1.0" ?>
— <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
— <soap:Body>
— <soap:Fault>
<faultcode>soap:Server</faultcode>
<faultstring>Server was unable to process request. ---> Procedure 'CreateRemoteServer' expects parameter '@Name', which was not supplied.</faultstring>
<detail />
</soap:Fault>
</soap:Body>
</soap:Envelope>

Как я понимаю это серверная ошибка. Вопрос:
Вследствии чего она возникла — вследсвтии неправильно сгенерированного запроса либо это ошибка касающая толко сервер?
Благодарен заранее за ответ
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.