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 :

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;
J'enregistre cette interface ainsi : InvRegistry.RegisterInterface(TypeInfo(IOperateurPECService), 'http://localhost:8080/', 'UTF-8');.

Pour la partie implementation ça donne ceci :

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;
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
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;
Pour finir j'enregistre ma classe : InvRegistry.RegisterInvokableClass(TOperateurPECService);.

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 ?