soapAction WSDL

Den94
Дата: 08.10.2019 08:31:07
Доброго времени суток!
Имею проблему написать soap-сервис по уже предоставленной wsdl. Сам сервис описан, но его описание не совпадает с предоставленным. Основная проблема с описанием soapAction, в дельфовой wsdl он выглядит как
Den94
Дата: 08.10.2019 08:33:48
<operation name="sendResponse">
<operation xmlns="http://schemas.xmlsoap.org/wsdl/soap/" soapAction="urn:HIVRegistryIntf-Callback#sendResponse" style="rpc"/>
....
</operation>

а надо

<operation name="sendResponse">
<operation xmlns="http://schemas.xmlsoap.org/wsdl/soap/" soapAction="sendResponse" style="rpc"/>
....
</operation>

можно поменять в OnAfterPublishingWSDL на нужное, но тогда при обращении к серверу выходит ошибка unknown soap action.
Как сделать описание нужным и работающим?
X-Cite
Дата: 08.10.2019 12:07:26
Вы использовали встроенный в Delphi WSDLImporter и он неверно сгенерировал Action?
X-Cite
Дата: 08.10.2019 12:23:58
АА.. вы делаете сервер, но подгоняете под готовую wsdl? какой ужас...
Попробуйте
InvRegistry.RegisterDefaultSOAPAction(TypeInfo(IAAA), 'zzz');

но он выставит его для всех операций
X-Cite
Дата: 08.10.2019 12:32:05
Еще можно вот так, для каждой операции задать свой..
InvRegistry.RegisterAllSOAPActions(TypeInfo(IAAA), '|MyAction1|MyAction2|MyAction3|MyAction4');
Den94
Дата: 08.10.2019 12:41:47
X-Cite,

Спасибо за ответ. Но не помогло, изменений в wsdl нет
X-Cite
Дата: 08.10.2019 12:56:22
Покажите код региастрации сервиса
и приложите wsdl что-ли
Den94
Дата: 08.10.2019 13:14:16
  TCallback = class(TInvokableClass, Callback)
  public
    function sendResponse(const id: string; const oid: string; const response: string): Status; stdcall;
  end;

 TSOAPCredentials = class(TSoapHeader)
 private
   fMessageID:string;
 public
   constructor Create; overload; override;
   constructor Create(AMessageID:string);  overload;

   function ObjectToSOAP(RootNode, ParentNode: IXMLNode;
                            const ObjConverter: IObjConverter;
                            const NodeName, NodeNamespace, ChildNamespace: InvString; ObjConvOpts: TObjectConvertOptions;
                            out RefID: InvString): IXMLNode; override;
 end;

.....
 
initialization
  InvRegistry.RegisterInvokableClass(TCallback);
  InvRegistry.RegisterHeaderClass(TypeInfo(TCallback), TSOAPCredentials);
  InvRegistry.RegisterDefaultSOAPAction(TypeInfo(TCallback), 'sendResponse');

сам wsdl висит на http://92.255.206.241:8100/wsdl/Callback
X-Cite
Дата: 08.10.2019 15:30:11
Den94,

InvRegistry.RegisterDefaultSOAPAction нужен TypeInfo интерфейса а не класса.
Какой интерфейс у вас отвечает за сервис, тот и нужно указать
Den94
Дата: 08.10.2019 15:43:45
X-Cite
Den94,

InvRegistry.RegisterDefaultSOAPAction нужен TypeInfo интерфейса а не класса.
Какой интерфейс у вас отвечает за сервис, тот и нужно указать


Заработало вроде как, спасибо. Не подскажите какие-нибудь ресурсы по теме? Ато гугл упорно не хочет открывать мне этих секретов