Salve

Sempre per la famosa applicazione client-server (che sto recodando usando i componenti indy) ho sviluppato un protocollo che si basa sullo scambio tra client e server di dati formattati con xml.

Un esempio di formattazione dei dati potrebbe essere questa:
codice:
<valvonauta>
 <header>
  <comando>LOGIN</comando>
 </header>
 <info>
  <username>VaLvOnAuTa</username>
 </info>
</valvonauta>
Ora ho creato un datamodule con un XMLDocument che ha due funzioni:
Formattare il dato in xml ed estrarre i dati da una stringa (ovviamente formattata in xml).
Il codice è questo:
codice:
unit cProtocollo;

interface

uses
  SysUtils, Classes, xmldom, XMLIntf, msxmldom, XMLDoc;

type
  TProtocollo = class(TDataModule)
    xmlDoc: TXMLDocument;
  private
  public
    Comando                       : string;
    function Tipo(pXml: string)   : string;
    function ToXml                : string;
  end;

var
  Protocollo: TProtocollo;

implementation

function TProtocollo.Tipo(pXml: string): string;
var nNodo: IXMLNode;
begin
 xmlDoc.Active:=False;
 xmlDoc.XML.Text:=pXml;
 try
  xmlDoc.Active:=True;
  nNodo:=xmlDoc.DocumentElement.ChildNodes['Header'];
  Tipo:=nNodo.ChildNodes['Comando'].Text;
  xmlDoc.Active:=False;
 except
  Tipo := '';
 end;
end;

function TProtocollo.ToXml: string;
var vXML: string;
begin
 vXml:=       '<valvonauta>';
 vXml:=vXml + '  <Header>';
 vXml:=vXml + '    <Comando>'+ Comando +'</Comando>';
 vXml:=vXml + '  </Header>';
 vXml:=vXml + '</valvonauta>';
 ToXml:=vXML;
end;

{$R *.dfm}

end.
La funzione "Tipo" mi serve per riconoscere il comando ricevuto.
Ora, il client utilizza lo stesso datamodule e riesce ad estrerre il comando correttamente.
Il server invece, mi da l'errore nel titolo.
Dato che sulla stessa macchina il client funziona (riesce ad estrarre correttamente il dato tra i tag <Comando> e </Comando>) ed il server no, credo ci sia qualcosa che mi sfugge, ma non è certo l'installazione dell' MSXML.