Créer une persistance avec archivage

Messages postés
95
Date d'inscription
vendredi 14 janvier 2005
Statut
Membre
Dernière intervention
4 mars 2013
- - Dernière réponse : madkeyboard
Messages postés
100
Date d'inscription
mercredi 27 avril 2011
Statut
Membre
Dernière intervention
21 décembre 2012
- 18 déc. 2012 à 11:22
Bonjour à tous et merci de prendre le temps de lire ce post.

Je suis en train de réaliser une application multi-client / multi-serveur (par réseau TCP) ayant un cahier des charges très contraignant. J'aurais besoin de vos avis pour utiliser la meilleure solution technique.

Voici la situation:
Chaque client génère des informations à transmettre au(x) serveur(s) en fonctions des données entrées par l'utilisateur. Ces données sont alors traitées par le(s) serveur(s) puis injectées dans une base de données

Cahier des charges:
- Les informations à envoyer doivent être stockées de façon persistante, au niveau du client avant l'envoi et au niveau du serveur après la réception.
- Dans le client, les informations déjà envoyées doivent être conservées à des fins d'archivage.
- Dans le serveur, les informations déjà traitées doivent être conservées dans le même but.
- Les clients ne peuvent pas avoir de bases de données.

La communication TCP est déjà au point. J'ai prévu d'utiliser une file (System.Collections.Generic.Queue) pour stocker les données à envoyer / reçue pour avoir un accès plus rapide, mais la persistance et l'archivage me posent problème.
La sérialisation me paraît être une solution à la persistance mais ne permet pas l'archivage directement...

Ma question est donc: comment réaliser la persistance et l'archivage?
BadBoy38
Afficher la suite 

2 réponses

Messages postés
1137
Date d'inscription
lundi 17 novembre 2003
Statut
Membre
Dernière intervention
23 janvier 2016
17
0
Merci
Salut,

Une solution serait d'utiliser le transit par socket d'objets structuré et serialisable, les mêmes objets pourraient être utilisés avec la serialisatin XML.

Pour la serialisation XML,
Faire un schéma XSD de la structure des messages

Passer le schéma XSD à l'outil XSD.EXE afin de générer un proxy Csharp
Les classes auront les attributs xml comme par exemple
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "2.0.50727.42")]
[System.SerializableAttribute()]
[System.Xml.Serialization.XmlTypeAttribute(Namespace =  "http://tempuri.org/")]
public partial class MessageData { /*...*/  }


3 : Intégrer le proxy (classes serialisables) dans son projet

4 : Faire 2 fonctions SerializeObj et DeserialyzeObj
Utiliser les objets suivants
XmlSerializer serializer = new XmlSerializer(objToSerialize.GetType());
serializer.Serialize(output, objToSerialize);

Utiliser un XmlDocument et la fonction "Save" vers une hiérarchie de répertoire de stockage (RACINE\JJ_MM_AAAA) par exemple

VOilà pour l'archivage.
Il sera facile de récupérer un fichier archivé, de le serialiser et de le renvoyer par TcpIP
Ce qui règle la "persistance"

Utiliser une classe de même structure pour faire transiter les objets par TCPIP sans les attributs de serialisation XML
[Serializable]
public class MessageData
{
    /*....*/
}

TcpClient client  = new TcpClient();
NetworkStream clientStream = null;
MessageData data = new MessageData(/*...*/);
/*...*/
IFormatter formatter = new BinaryFormatter();
formatter.Serialize(clientStream, data);


J'aurais aussi utilisé le service MSMQUEUE de windows, facilement gérable depuis C# avec l'objet :

System.Messaging.MessageQueue;


Et là, l'architecture serait d'autant plus élégante.

Bye...
Commenter la réponse de yann_lo_san
Messages postés
100
Date d'inscription
mercredi 27 avril 2011
Statut
Membre
Dernière intervention
21 décembre 2012
0
Merci
Voilà qui est instructif, je garde ça en tête ^^
J'espère que c'en aura profité au demandeur !
Commenter la réponse de madkeyboard