Как выставить сложный тип в Delphi WebService - PullRequest
5 голосов
/ 12 июля 2011

У меня проблема с выставлением класса DTO через SOAP WebService.

Мой класс выглядит как

TKontrahent = class
public
    Imie : string;
    Nazwisko : string;
    Id : integer;
end; 

Вот код службы:

TKontrahentService = class(TInvokableClass, IKontrahentService)
public
    function Dodaj( kontrahnet : TKontrahent)  : integer; stdcall;
    function Aktualizuj ( kontrahent : TKontrahent) : integer; stdcall;
    function Usun ( kontrahent : TKontrahent) : integer; stdcall;
    function Nowy : TKontrahent; stdcall;
end;

А как тип публикуется в WSDL:

<types>
  <xs:schema targetNamespace="urn:Kontrahent" xmlns="urn:Kontrahent">
    <xs:complexType name="TKontrahent">
      <xs:sequence/>
    </xs:complexType>
  </xs:schema>
</types>

Буду благодарен за любые советы. Я не могу найти образец с более сложными типами. С наилучшими пожеланиями, крлм

1 Ответ

7 голосов
/ 12 июля 2011

Чтобы предоставить и использовать класс TKontrahent в стандартной службе Delphi SOAP, он должен быть подклассом TRemotable , а его свойства должны быть опубликованы.

В качестве отправной точки (например, после перехода с Delphi 7 на 2009) я обычно импортирую существующий WSDL для создания клиента SOAP и изучения сгенерированного исходного кода для классов и свойств.

...