Мне нужно добавить этот заголовок в клиент веб-сервисов, написанный на delphi, потому что сервер отклоняет запрос:
<!--<soap:Header xmlns:wsa = "http://www.w3.org/2005/08/addressing">
<To soap:mustUnderstand = "1" xmlns = "http://www.w3.org/2005/08/addressing">http://srvweh01:8081/ISPWebService/IspOrderWs.svc</To>
</soap:Header>-->
Импортер WSDL создал стандартный код:
function GetIspOrderWs(UseWSDL: Boolean; Addr: string; HTTPRIO: THTTPRIO): IspOrderWs;
const
defWSDL = 'C:\Sources\SoapClientXWEH\IspOrderWs.xml';
defURL = 'http://srvweh01:8081/ISPWebService/IspOrderWs.svc';
defSvc = 'IspOrderWs';
defPrt = 'WSHttpBinding_IspOrderWs';
var
RIO: THTTPRIO;
begin
Result := nil;
if (Addr = '') then
begin
if UseWSDL then
Addr := defWSDL
else
Addr := defURL;
end;
if HTTPRIO = nil then
RIO := THTTPRIO.Create(nil)
else
RIO := HTTPRIO;
try
Result := (RIO as IspOrderWs);
if UseWSDL then
begin
RIO.WSDLLocation := Addr;
RIO.Service := defSvc;
RIO.Port := defPrt;
end else
RIO.URL := Addr;
finally
if (Result = nil) and (HTTPRIO = nil) then
RIO.Free;
end;
end;
и это мой вызов серверу:
getIspOrderWs (). addOrder (pippoPRT);
Итак, мой вопрос: как мне вставить недостающий заголовок (и как это сделать) перед вызовом, чтобы сообщение SOAP можно было скомпилировать правильно?
Все предложения приветствуются, Спасибо!
Мне удалось использовать событие HTTPRIOBeforeExecute и изменить там параметр SOAPRequest.
А как у вас дела ?? Я столкнулся с серьезными трудностями при использовании объекта TStream ....
@ whosrdaddy: Спасибо! В любом случае, в моем случае мне не повезло с предложением кулака ... Я проверил с wirehark, чтобы получить xml, но я не вижу раздел заголовка ...
Оба решения включают класс TSOAPHeader, возвращают мне ошибку: ESOAPDomConvertError: преобразование из класса TValueDataImpl в SOAP не поддерживается - классы SOAP должны быть производными от TRemotable. Любое другое предложение ??





вы можете посмотреть здесь за некоторыми предложениями .... :)