Sto scrivendo un server di rete in C# .NET 4.0. Esiste una connessione TCP/IP di rete tramite la quale posso ricevere elementi XML completi. Arrivano regolarmente e ho bisogno di elaborarli immediatamente. Ogni elemento XML è un documento XML completo di per sé, quindi ha un elemento di apertura, diversi sottonodi e un elemento di chiusura. Non esiste un singolo elemento radice per l'intero stream. Così, quando ho aperto il collegamento, quello che ottengo è come questo:Lettura di interi elementi da un flusso di rete XML
<status>
<x>123</x>
<y>456</y>
</status>
Poi qualche tempo dopo continua:
<status>
<x>234</x>
<y>567</y>
</status>
E così via. Ho bisogno di un modo per leggere la stringa XML completa fino al completamento di un elemento di stato. Non voglio farlo con metodi di lettura di testo normale perché non so in che tipo di dati arrivano i dati. Non posso in alcun modo aspettare che l'intero flusso sia finito, come spesso descritto altrove. Ho provato a usare la classe XmlReader ma la sua documentazione è strana, i metodi non funzionano, il primo elemento è perso e dopo l'invio del secondo elemento, si verifica un'eccezione Xml perché ci sono due elementi radice.
Dubito che XmlReader sia la strada da percorrere, come ci si aspetterebbe da un elemento radice e non è orientato per gli elementi XML in streaming continuo. Di solito quando gestisci connessioni basate su socket, ascolterai la connessione e cercheresti di identificare l'inizio e la fine di ogni blocco di dati.So che hai detto che non vuoi, ma mi aspetterei che dovresti usare metodi di lettura in testo normale per identificare almeno una porzione di XML che puoi quindi analizzare. –
è necessario istanziare un nuovo lettore ogni messaggio, in cui il messaggio è un nodo completo. –