Envoyer des chaînes simples dans l'en-tête SOAP de Delphi

J'ai besoin d'envoyer quelque chose comme ceci:

   <soapenv:Header>
      <ser:userName>admin</ser:userName>
      <ser:userPassword>secret</ser:userPassword>
   </soapenv:Header>

Delphi importateur WSDL généré ceci:

  userName2 = class(TSOAPHeader)
  private
    FValue: string;
  published
    property Value: string  read FValue write FValue;
  end;

  userName      =  type string;

  WsService = interface(IInvokable)
    function call(const userName: userName; const userPassword: userPassword);

et enregistré au type:

  InvRegistry.RegisterHeaderClass(TypeInfo(WsService), userName2, 'userName', 'http://localhost/path/to/services');

Le problème est que quand je l'appelle à l'aide de delphi code généré, il met le nom d'utilisateur et mot de passe dans le Corps du message SOAP, pas dans l'en-Tête.

J'ai donc essayé d'envoyer les en-Têtes de moi-même, comme ceci:

Changé la définition de type d'hériter de la nomdutilisateur2 classe parce que je ne peux pas envoyer une chaîne de caractères à l'aide de la ISOAPHeaders.La méthode Send ().

userName = class(userName2);        

Ensuite envoyé les en-têtes:

user := userName.Create;
user.Value := 'admin';

WS := GetWsService;
(WS as ISOAPHeaders).Send(user);

Maintenant les en-têtes sont à la bonne place, mais ils sont envoyés comme ceci:

<SOAP-ENV:Header>
    <NS1:userName xmlns:NS1="http://localhost/path/to/services">
        <Value xmlns="http://localhost/path/to/services">admin</Value>
    </NS1:userName>
</SOAP-ENV:Header>

Presque là, mais je ne veux pas la "Valeur" des biens, je veux juste une plaine simple balise dans l'en-tête.

Comment puis-je le faire?

Grâce.

== EDIT ==

Comme demandé, le WSDL est ici: http://desenvolvimento.lemontech.com.br:8081/wsselfbooking/WsSelfBookingService?wsdl

SOAP UI importées et produites de cette demande d'échantillon:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ser="http://lemontech.com.br/selfbooking/wsselfbooking/services">
   <soapenv:Header>
      <ser:userPassword></ser:userPassword>
      <ser:userName></ser:userName>
      <ser:keyClient></ser:keyClient>
   </soapenv:Header>
   <soapenv:Body>
      <ser:pesquisarSolicitacao>
         <!--You have a CHOICE of the next 2 items at this level-->
         <idSolicitacaoRef></idSolicitacaoRef>
         <dataInicial></dataInicial>
         <dataFinal></dataFinal>
         <registroInicial>1</registroInicial>
         <!--Optional:-->
         <quantidadeRegistros>50</quantidadeRegistros>
      </ser:pesquisarSolicitacao>
   </soapenv:Body>
</soapenv:Envelope>

Cet exemple de requête fonctionne très bien, mais je ne peux pas comprendre comment le faire cet appel à Delphes.

source d'informationauteur Fabio Gomes