Installation et fonctionnement de McdServerService

0000002291     -      16/07/2021

McdServerService est le successeur de McdServer. Ce service est conçu pour fonctionner avec la version 8.4 des Mercator MCD, MFDDIST et SOS. Par rapport à son prédécesseur, McdServerService apporte ses améliorations :

  • Comme son nom l'indique, il s'agit d'un service. Il peut fonctionner même quand aucune session n'est ouverte sur le serveur sur lequel il tourne.
  • Il comprend un serveur TCP et ne requiert donc plus aucun autre serveur prenant en charge les communications. Un serveur FTP n'est donc plus nécessaire.
  • Comme McdServer n'est plus construit sur base d'un échange de fichiers (over, mcd.zip, ...) mais sur une véritable communication TCP, la réactivité du système est beaucoup plus haute. Il est en résulte une plus grande rapidité des échanges.
  • Il ne requiert que l'ouverture d'un seul port TCP. Cela facilite la configuration des routers et des firewalls qu'il faut traverser.
  • Il fonctionne en multi-thread : il est donc capable de servir simultanément plusieurs sites distants. Cela permet donc un fonctionnement "stateless" et n'impose plus la notion de "session". (Session = un magasin devait attendre que McdServer soit libre lorsqu'il était occupé par un autre site distant)
  • Il est entièrement bidirectionnel et symétrique : tout ce qui peut être importé peut être exporté et vice versa. De la sorte, McdServer peut-être installé sur n'importe quel des deux sites qui doivent être synchronisés. Il est dès lors possible d'effectuer l'installation là où la configuration internet (router, adresse ip fixe, ...) permet l'installation la plus aisée.
  • Il permet l'échange de données de tous les signalétiques.
  • Il est possible d'ajouter un customizer McdClient qui permet de modifier les requêtes SQL exécutées tant du côté client que du côté serveur. Voir cet exemple.
  • Il permet à présent l'échange de fichiers SQL.
  • La nouvelle option "Echanges Centrale \ Encaissements mouvementent caisse" permet de déterminer si le transfert des enregistrements de HISCAISS (historique des encaissements) doit mouvementer la caisse. (A mettre à OUI dans les configurations SOS; ID = MCD_TCAISS)

Il n'est pas possible d'utiliser McdServerService avec des fonctionnalités de communications inter-sites qui ne sont pas Aruba ou Majuro. De même ces fonctionnalités Aruba et Majuro ne peuvent plus communiquer avec l'ancienne version de McdServer.

Le nouveau McdServer n'est pas compatible avec les n° de série de niveau 3. L'équipe de développement a estimé qu'il était déraisonnable de vouloir maintenir avec exactitude un pool de numéros de série disponibles sur plusieurs sites avec des échanges non permanents. 

Installation de McdServerService

Ce setup va installer :

  • McdServerService.exe : serveur qui sera enregistré dans les services de votre configuration locale.
  • McdServerGui.exe : application de gestion dont le démarrage sera automatique lors du démarrage de Windows et qui sera visible dans le systray.
  • McdServerService.ini : fichier de configuration qui permet de fixer certains paramètres du service :
    • port : le port TCP à utiliser
    • rep_data : le chemin vers le répertoire data du Mercator auquel le service doit se lier. (Attention : ne pas indiquer de mapping de réseau car un service ne voit pas les mappings)
    • secur_string : une chaîne de caractères personnelle qui va servir de clé de cryptage et de sécurité pour les communications.
Après toute modification dans le fichier ini, il est nécessaire de redémarrer le service. Cela peut être fait simplement via un clic-droit sur l'icône de McdServerGui dans le systray.
 
McdServerGui permet de visualiser l'activité en cours sur McdServerService et d'arrêter/démarrer le service. L'activité de McdServerService est aussi enregistrée dans des fichiers journaliers qui se trouvent dans le sous-répertoire Log. Ces fichiers peuvent être lus avec Notepad.
 
Si le dossier Mercator se trouve sur un autre serveur, il est nécessaire d'adapter l'identité sous laquelle tourne McdServerService pour lui donner des droits suffisants pour atteindre le répertoire data et le serveur SQL. Cela se fait via les outils d'administration, service. Il convient d'indiquer un compte avec suffisamment de droits dans l'onglet "Connexion". Ensuite, il faut redémarrer le service.
 
Si on souhaite visualiser en temps réel l'activité de McdServerService en mode "console", il suffit de procéder comme suit :
  • Arrêter le service McdServerService (si celui-ci est actif). Cela peut être fait simplement via McdServerGui qui se trouve dans le systray.
  • Démarrer McdServerService.exe en lui passant comme paramètre -console.
  • Attention : après fermeture de cette application, les fonctionnalités de McdServerService ne seront plus assurées. Le cas échéant, il faut redémarrer le service manuellement.

Si on ne souhaite pas que McdServerGui soit lancé automatiquement au démarrage de Windows, il suffit d'éditer la clé dans le registre HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run et d'y retirer la chaîne McdServerGui.

Configuration de Mercator

Les options sont définissables via "Outils \ Options \ Echanges Centrale" :

  • Host McdServerService : indiquez l'adresse ip (publique) ou le nom d'hôte qui permet d'attendre McdServerService, suivis de : et du port. Par exemple :
    • 88.195.65.10:5060
    • adsl.mercator.be:5060
  • Chaîne sécur. McdServerService : la même valeur que celle indiquée en tant que secur_string dans le fichier ini (cfr ci-dessus)
  • Time-out "remote" : indiquez en secondes le délai d'attente pour une réponse de McdServerService
  • Sens échanges des documents :
    • OUT (par défaut) : les documents sont exportés et le disponible peut être importé
    • IN : les documents sont importés et le disponible peut être exporté.

Concernant cette dernière option, il faut bien noter que celle-ci ne peut être changée systématiquement afin de transférer les documents dans les deux sens.

Au niveau des séquences, il faut créer une séquence spécifique (recevant les documents) correspondant à chaque séquence du site distant envoyant des documents. Elles doivent porter le même code.
Dans cette nouvelle séquence, il faut cocher "Distant" (pour empêcher les utilisateurs d'encoder dans ce journal).

Il faut également

  • ajouter les champs x_modiftag (bigint) dans les fiches concernées (cli, stock, (fou), ...).
    alter table CLI add C_MODIFTAG bigint not null default 0
    ...
    Si les champs existent, les remettre à 0 (sur les deux sites).
  • ajouter le champ Maestria (smallint) dans pieds_v.
    alter table PIEDS_V add MAESTRIA smallint not null default 0

 

Notions de timeouts

Contrairement à la version legacy, McdServerServer ne dépend plus d'autres serveurs (serveur FTP) et ne contient plus la notion de "session". Cela réduit drastiquement le nombre de timeouts à régler. Il en reste 3

  • Côté client :
    • Time-out "remote" : il s'agit du délai d'attente en secondes pour le client TCP. C'est l'intervalle pendant lequel, après avoir envoyé une requête via TCP, Mercator va attendre la réponse. Ce délai donc être au moins égal à la plus grande somme de : temps d'upload de la requête + temps d'exécution SQL de la requête sur McdServer
    • Time-out (sec.) SQL Server (commandes Aruba) : délai d'attente pour l'exécution d'une requête SQL dans Mercator. (ce timeout n'est pas limité aux échanges avec la centrale mais est utilisé partout dans Mercator). Ce délai doit être au moins égal au plus grand temps d'exécution d'une mise à jour ou d'une extraction SQL.
  • Côté serveur : dans le fichier McdServerService.ini : timeout_sql. C'est le même timeout que celui indiqué juste ci-dessus mais pour les requêtes SQL exécutées par McdServerService. Il est exprimé en secondes.

Installation de plusieurs McdServerService sur un même serveur

Si plusieurs Mercator sont hébergés sur un même serveur, il peut-être nécessaire d'avoir plusieurs instances de McdServerService sur un même serveur. Cela peut se faire en ajoutant une ligne supplémentaire dans le fichier McdServerService.ini : serviceSuffix = ...

Ce suffixe est une chaîne libre (compatible avec les caractères autorisés dans les noms de service) qui va vous permettre de compléter le nom du service et ainsi de distinguer ce service parmi d'autres.

Attention : avant d'ajouter ou de modifier cette ligne, il est nécessaire d'arrêter le service et de le désinstaller sous son nom actuel. Il faut donc appliquer la procédure dans cet ordre (l'ordre est impératif) :

  • faire l'installation à partir du setup de base - le service sera installé sous le nom McdServerService ou arrêter le service s'il est déjà installé et fonctionnel
  • désinstaller le service avec son nom actuel via McdServerService.exe -u
  • ajouter / modifier la ligne serviceSuffix = XYZ dans McdServerService.ini
  • réinstaller le service avec son nouveau nom via McdServerService.exe -i. Le service sera donc installé en tant que McdServerServiceXYZ
  • redémarrer le service.

Quelques considérations sur le choix des données à échanger

Le système décrit ici est conçu pour transférer des données lors des variations de celles-ci. L'esprit est donc de transférer uniquement des "deltas" de données et non des jeux de données complets et massifs. Si par exemple plusieurs milliers d'enregistrements doivent être échangés ou un grand nombre de fichiers de taille importante, il sera préférable de transmettre cela en dehors de McdServerService. Les signalétiques importants peuvent toujours être importés/exportés sous forme de fichier XML. Les répertoires contenant beaucoup ou des fichiers volumineux peuvent être facilement transportés en dehors du système.

Ne pas respecter cela peut entraîner des délais de communication anormalement longs, voire des déconnexions, ou des saturations de mémoire RAM tant au niveau du client que du serveur. Ceci doit être spécialement pris en compte lors de la mise en route du système.


McdServerService 2.0 supporte l'adressage IPv6

Dans Mercator, l'option "Host McdServerService" doit contenir [ IPv6 ]:port.

Par exemple : [2002:587:1ab5::587:1eb6]:5060

Ensuite, il faut ajouter une ligne dans le fichier McdServerService.ini :

  • Pour permettre les connexions en IPv4 et IPv6 :
    address_family = ipV4+ipV6
  • Pour permettre les connexions en IPv6 uniquement :
    address_family = ipV6

La dernière version de McdServerService.exe est disponible ici.


Autres liens concernant la configuration des échanges via MCDServerService :