7
votes

Delphi SOAP Tareaux Problème

J'ai une application de savon créée avec Delphi.

L'entrée vient au serveur correct. Mais la sortie est toujours vide. r code> objet (réponse) créé, mais longueur (notes) code> Toujours 0. Si je fais une application sans tableaux, cela fonctionne également correctement. Où est le problème? 3 jours de googling et d'essayer différentes combinatios n'a pas aidé. P>

Interface: STROND> P>

  c:=tclientinformationstructure.Create;
  try
    c.ClientApplicationName:=labelededit1.Text;
    c.ClientApplicationPassword:=labelededit2.Text;
    c.RequestIdentifier:=labelededit3.Text;
    c.StartSequenceNumber:=strtointdef(labelededit4.Text,0);
    c.NumberOfNotes:=strtointdef(labelededit5.Text,0);
    r:=(HTTPRIO1 as ibla).GetNotes(c);
    if assigned(r) then
      if length(r.notes)>0 then
        if assigned(r.notes[0]) then showmessage(r.notes[0].AuthorUserName);
  finally
    freeandnil(c);
    if assigned (r.notes[0]) then freeandnil(r.notes[0]);
    if assigned(r) then freeandnil(r);
  end;


3 Réponses :


2
votes

Utilisez SOAPUI pour envoyer une demande et voir si quelque chose est dans la réponse. Travailler avec des objets est pratique, mais vous devez parfois descendre au niveau inférieur et voir le XML qui est en train d'être envoyé. Soapui est votre ami ici.


1 commentaires

Chris, merci pour la réponse. J'ai installé Soapui. J'ai eu la réponse Mais je ne sais pas Qu'est-ce que ça veut dire. On dirait que la réponse n'a qu'un pointeur à un objet ...



4
votes

sur le serveur, pour accéder au module Web SOAP, sélectionnez le composant httpsoappascalinvoker et ouvrez la propriété Options dans l'inspecteur d'objets. Assurez-vous que l'option "sorotrefnodestobody" est cochée. Cela garantira que dans la résonance du savon, les éléments sont passés à l'extérieur du nœud de réponse, dans le corps, où le client peut les trouver.

groetjes, bob Swart


0 commentaires

4
votes

Merci à tous. Tous fonctionne bien avec ce code:

Server H2>

Partie d'interface: strong> p>

procedure TForm1.BitBtn1Click(Sender: TObject);
var c:tclientinformationstructure;
    r:tNoteCollection;
begin
  c:=tclientinformationstructure.Create;
  try
    c.ClientApplicationName:=labelededit1.Text;
    c.ClientApplicationPassword:=labelededit2.Text;
    c.RequestIdentifier:=labelededit3.Text;
    c.StartSequenceNumber:=strtointdef(labelededit4.Text,0);
    c.NumberOfNotes:=strtointdef(labelededit5.Text,0);
    r:=nil;
    r:=(HTTPRIO1 as iCIS2Opus).GetNotes(c);
      if r.getlen>0 then
        if assigned(r.notes[0]) then showmessage(r.notes[0].AuthorUserName);
  finally
    if assigned(c) then freeandnil(c);
    if assigned(r) then freeandnil(r);
  end;
end;


4 commentaires

Ne nous rendez pas à jouer sur place-les-différences. Expliquez quelles pièces que vous deviez changer pour faire fonctionner votre programme.


Cette note montre exactement le changement. Voir la manière dont la matrice a été déclarée dans la partie d'interface et mis en œuvre la méthode pour ajouter des éléments


Résultat: = tnotecollection.create mais qui le réalise? Est-il détruit après l'appel parce que c'est une trémotable?


Point mineur: Le chèque attribué n'est pas requis pour FreeAndnil, car il vérifie clairement explicitement pour voir si l'objet est nul avant d'appeler Détruire.