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:
Ora ho creato un datamodule con un XMLDocument che ha due funzioni:codice:<valvonauta> <header> <comando>LOGIN</comando> </header> <info> <username>VaLvOnAuTa</username> </info> </valvonauta>
Formattare il dato in xml ed estrarre i dati da una stringa (ovviamente formattata in xml).
Il codice è questo:
La funzione "Tipo" mi serve per riconoscere il comando ricevuto.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.
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.![]()



Rispondi quotando