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.