Créer une persistance avec archivage

badboy38 Messages postés 95 Date d'inscription vendredi 14 janvier 2005 Statut Membre Dernière intervention 4 mars 2013 - 1 déc. 2012 à 15:02
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

2 réponses

yann_lo_san Messages postés 1137 Date d'inscription lundi 17 novembre 2003 Statut Membre Dernière intervention 23 janvier 2016 26
1 déc. 2012 à 21:24
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...
0
madkeyboard Messages postés 100 Date d'inscription mercredi 27 avril 2011 Statut Membre Dernière intervention 21 décembre 2012 1
18 déc. 2012 à 11:22
Voilà qui est instructif, je garde ça en tête ^^
J'espère que c'en aura profité au demandeur !
0
Rejoignez-nous