WST funktioniert nicht

Alle Fragen zur Netzwerkkommunikation
Antworten
Juergen
Beiträge: 1
Registriert: Sa 19. Jan 2013, 10:08

WST funktioniert nicht

Beitrag von Juergen »

Ich habe das aktuelle Webservice Toolkit aus dem Repository (https://lazarus-ccr.svn.sourceforge.net ... /wst/trunk) auf zwei Lazurus Versionen installiert: Lazurus 0.9.30 unter Ubuntu 12.10 und Lazarus 1.04 unter Windows 7. Ich hatte jeweils die Indy Kompon (Version 10.2.0.3) sowie die Synapse (https://synalist.svn.sourceforge.net/sv ... list/trunk) Bibliotheken installiert.

Der Versuch eine aus einer WSDL Datei Pascal Code zu erzeugen schlug fehl. Um zu überprüfen, od es sich um ein Problem mit meiner Installation oder dem WSDL File handelt, habe ich mir die Webservice Beispielaplikation aus dem Buch "Lazarus" des C&L Verlages geladen (http://www.cul.de/download/tcp-webservice.zip). Auch der Versuch aus der dortigen WSDL Datei Pascal Code zu erzeugen schlug fehl. Die Datei calcservice.pas sieht wie folgt aus:

Code: Alles auswählen

{
This unit has been produced by ws_helper.
  Input unit name : "calcservice".
  This unit name  : "calcservice".
  Date            : "18.01.2013 14:44:55".
}

unit calcservice;
{$IFDEF FPC}
  {$mode objfpc} {$H+}
{$ENDIF}
{$IFNDEF FPC}
  {$DEFINE WST_RECORD_RTTI}
{$ENDIF}
interface
 
uses SysUtils, Classes, TypInfo, base_service_intf, service_intf;
 
const
  sNAME_SPACE = 'urn:calc-service';
  sUNIT_NAME = 'calcservice';
 
type
 
 
Implementation
uses metadata_repository, record_rtti, wst_types;
 
 
var
  typeRegistryInstance : TTypeRegistry = nil;
initialization
  typeRegistryInstance := GetTypeRegistry();
 
 
 
 
End.


Laut Buch müsste dies herauskommen:

Code: Alles auswählen

 
{
This unit has been produced by ws_helper.
  Input unit name : "calcservice".
  This unit name  : "calcservice".
  Date            : "18/08/2008 02:59:02".
}

unit calcservice;
{$IFDEF FPC}
  {$mode objfpc} {$H+}
{$ENDIF}
{$IFNDEF FPC}
  {$DEFINE WST_RECORD_RTTI}
{$ENDIF}
interface
 
uses SysUtils, Classes, TypInfo, base_service_intf, service_intf;
 
const
  sNAME_SPACE = 'urn:calc-service';
  sUNIT_NAME = 'calcservice';
 
type
 
 
  ICalcService = interface(IInvokable)
    ['{090EADB7-6B25-4F35-9419-2AF113D44BF8}']
    function Add(
      const  A : integer;
      const  B : integer
    ):integer;
    function Substract(
      const  A : integer;
      const  B : integer
    ):integer;
  end;
 
  procedure Register_calcservice_ServiceMetadata();
 
Implementation
uses metadata_repository, record_rtti, wst_types;
 
 
procedure Register_calcservice_ServiceMetadata();
var
  mm : IModuleMetadataMngr;
begin
  mm := GetModuleMetadataMngr();
  mm.SetRepositoryNameSpace(sUNIT_NAME, sNAME_SPACE);
  mm.SetServiceCustomData(
    sUNIT_NAME,
    'ICalcService',
    'TRANSPORT_Address',
    'http://127.0.0.1:8000/services/ICalcService'
  );
  mm.SetServiceCustomData(
    sUNIT_NAME,
    'ICalcService',
    'FORMAT_Style',
    'rpc'
  );
  mm.SetOperationCustomData(
    sUNIT_NAME,
    'ICalcService',
    'Add',
    '_E_N_',
    'Add'
  );
  mm.SetOperationCustomData(
    sUNIT_NAME,
    'ICalcService',
    'Add',
    'FORMAT_Input_EncodingStyle',
    'literal'
  );
  mm.SetOperationCustomData(
    sUNIT_NAME,
    'ICalcService',
    'Add',
    'FORMAT_OutputEncodingStyle',
    'literal'
  );
  mm.SetOperationCustomData(
    sUNIT_NAME,
    'ICalcService',
    'Substract',
    '_E_N_',
    'Substract'
  );
  mm.SetOperationCustomData(
    sUNIT_NAME,
    'ICalcService',
    'Substract',
    'FORMAT_Input_EncodingStyle',
    'literal'
  );
  mm.SetOperationCustomData(
    sUNIT_NAME,
    'ICalcService',
    'Substract',
    'FORMAT_OutputEncodingStyle',
    'literal'
  );
end;
 
 
initialization
 
 
 
End.


Jetzt natürlich meine Fragen: Was mache ich falsch und wie bringe ich das WST zum korrekten arbeiten.

Benutzeravatar
theo
Beiträge: 10467
Registriert: Mo 11. Sep 2006, 19:01

Re: WST funktioniert nicht

Beitrag von theo »


Antworten