Bonjour je développe pour la première fois un serveur webservice en delphi 10.2
Ce serveur doit traiter 3 types de messages (CreerPEC, VisualiserPEC, AnnulerPEC) j'ai déclaré ainsi une interface tel que :
J'enregistre cette interface ainsi : InvRegistry.RegisterInterface(TypeInfo(IOperateurPECService), 'http://localhost:8080/', 'UTF-8');.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54 type IOperateurPECService = interface(IInvokable) ['{EF430F7C-01D4-4AA0-A547-E5CC41D45C23}'] procedure creerPEC( const identification: Tidentification; const date: TXSDate; const type_: type_; const origine: Origine; const patient: Patient; const priseEnChargeDetaillee: PriseEnChargeDetaillee; const partenariat: Partenariat; out identification_Out: Tidentification; //(*) out date_Out: TXSDate; //(*) out type_Out: type_; //(*) out code: code; out raison: raison; out justification: justification; out libelle: libelle; out origine_Out: Origine; //(*) out patient_Out: Patient; //(*) out priseEnChargeDetaillee_Out: PriseEnChargeDetaillee; //(*) out partenariat_Out: Partenariat); stdcall; //(*) procedure visualiserPEC( const identification: Tidentification; const date: TXSDate; const type_: type_; const origine: Origine; const priseEnChargeDetaillee: PriseEnChargeDetaillee; const partenariat: Partenariat; out identification_Out: Tidentification; //(*) out date_Out: TXSDate; //(*) out type__Out: type_; //(*) out code: code; out raison: raison; out justification: justification; out libelle: libelle; out origine_Out: Origine; //(*) out patient: Patient; out priseEnChargeDetaillee_Out: PriseEnChargeDetaillee; //(*) out partenariat_Out: Partenariat); stdcall; //(*) procedure annulerPEC( const identification: Tidentification; const date: TXSDate; const origine: Origine; const priseEnChargeDetaillee: PriseEnChargeDetaillee; const partenariat: Partenariat; out identification_Out: Tidentification; //(*) out date_Out: TXSDate; //(*) out code: code; out raison: raison; out libelle: libelle; out origine_Out: Origine; //(*) out priseEnChargeDetaillee_Out: PriseEnChargeDetaillee; //(*) out partenariat_Out: Partenariat); stdcall; //(*) end;
Pour la partie implementation ça donne ceci :
Avec l'implémentation des 3 méthodes ci-dessous qui pour le moment ne font rien...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56 type TOperateurPECService = class(TInvokableClass, IOperateurPECService) public procedure creerPEC( const identification: Tidentification; const date: TXSDate; const type_: type_; const origine: Origine; const patient: Patient; const priseEnChargeDetaillee: PriseEnChargeDetaillee; const partenariat: Partenariat; out identification_Out: Tidentification; //(*) out date_Out: TXSDate; //(*) out type_Out: type_; //(*) out code: code; out raison: raison; out justification: justification; out libelle: libelle; out origine_Out: Origine; //(*) out patient_Out: Patient; //(*) out priseEnChargeDetaillee_Out: PriseEnChargeDetaillee; //(*) out partenariat_Out: Partenariat); stdcall; //(*) procedure visualiserPEC( const identification: Tidentification; const date: TXSDate; const type_: type_; const origine: Origine; const priseEnChargeDetaillee: PriseEnChargeDetaillee; const partenariat: Partenariat; out identification_Out: Tidentification; //(*) out date_Out: TXSDate; //(*) out type__Out: type_; //(*) out code: code; out raison: raison; out justification: justification; out libelle: libelle; out origine_Out: Origine; //(*) out patient: Patient; out priseEnChargeDetaillee_Out: PriseEnChargeDetaillee; //(*) out partenariat_Out: Partenariat); stdcall; //(*) procedure annulerPEC( const identification: Tidentification; const date: TXSDate; const origine: Origine; const priseEnChargeDetaillee: PriseEnChargeDetaillee; const partenariat: Partenariat; out identification_Out: Tidentification; //(*) out date_Out: TXSDate; //(*) out code: code; out raison: raison; out libelle: libelle; out origine_Out: Origine; //(*) out priseEnChargeDetaillee_Out: PriseEnChargeDetaillee; //(*) out partenariat_Out: Partenariat); stdcall; //(*) end;
Pour finir j'enregistre ma classe : InvRegistry.RegisterInvokableClass(TOperateurPECService);.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62 procedure TOperateurPECService.creerPEC( const identification: Tidentification; const date: TXSDate; const type_: type_; const origine: Origine; const patient: Patient; const priseEnChargeDetaillee: PriseEnChargeDetaillee; const partenariat: Partenariat; out identification_Out: Tidentification; //(*) out date_Out: TXSDate; //(*) out type_Out: type_; //(*) out code: code; out raison: raison; out justification: justification; out libelle: libelle; out origine_Out: Origine; //(*) out patient_Out: Patient; //(*) out priseEnChargeDetaillee_Out: PriseEnChargeDetaillee; //(*) out partenariat_Out: Partenariat); begin end; procedure TOperateurPECService.visualiserPEC( const identification: Tidentification; const date: TXSDate; const type_: type_; const origine: Origine; const priseEnChargeDetaillee: PriseEnChargeDetaillee; const partenariat: Partenariat; out identification_Out: Tidentification; //(*) out date_Out: TXSDate; //(*) out type__Out: type_; //(*) out code: code; out raison: raison; out justification: justification; out libelle: libelle; out origine_Out: Origine; //(*) out patient: Patient; out priseEnChargeDetaillee_Out: PriseEnChargeDetaillee; //(*) out partenariat_Out: Partenariat); begin end; procedure TOperateurPECService.annulerPEC( const identification: Tidentification; const date: TXSDate; const origine: Origine; const priseEnChargeDetaillee: PriseEnChargeDetaillee; const partenariat: Partenariat; out identification_Out: Tidentification; //(*) out date_Out: TXSDate; //(*) out code: code; out raison: raison; out libelle: libelle; out origine_Out: Origine; //(*) out priseEnChargeDetaillee_Out: PriseEnChargeDetaillee; //(*) out partenariat_Out: Partenariat); begin end;
Par la suite l'expert delphi m'a créé un TWebModule comprenant 1 THTTPSoapDispatcher, 1 THTTPSoapPascalInvoker et 1 TWSDLHTMLPublish.
Ainsi et de ce que l'ai cru comprendre le THTTPSoapDispatcher intercepte les requêtes soap puis les transmet au THTTPSoapPascalInvoker pour traitement et là je ne comprends pas comment se fait la liaison entre le THTTPSoapPascalInvoker et le code que j'ai implémenté...
Si quelqu'un peut m'éclairer, ça serait sympatique !
Je précise que le TWebModule reçoit bien les requêtes clients via WebModule1DefaultHandlerAction, je récupère bien la requête client dans TWebRequest.ContentFields. Néanmoins cette requête ne semble pas être dispatchée. C'est où que je comprends pas ?
Partager