2009-03-19 6 views
1

Dans notre application (un système de gestion de documents) nous sommes censés être informés des changements d'écran (ou notifier l'autre programme de changements d'écran) afin de garder les deux applications en regardant la même données, l'une étant l'application de traitement des commandes, l'autre la visionneuse de documents de la télécopie d'origine. L'application de traitement des commandes est écrite en vb6 et le gestionnaire de documents est en .net 3.5 (C#). Il fonctionne sur un serveur de terminal, donc il doit également être conscient de la session. La visionneuse de document ou l'application de traitement des commandes peut être ouverte en premier et les deux peuvent être utilisés sans l'autre. Quelle serait la meilleure méthode d'IPC?Meilleur IPC pour application VB6 et .net

Répondre

2

Si vous voulez pouvoir utiliser Vista ou Windows 7, la meilleure forme d'IPC sera TCP (ce qui se fait très facilement depuis VB6 avec le contrôle Winsock). L'avantage de ceci est que deux applications peuvent communiquer même si elles ne fonctionnent pas comme le même utilisateur, elles peuvent communiquer (vous ne pouvez pas faire cela avec SendMessage ou Named Pipes sous Vista +). La seule chose que vous devez vous rappeler est de définir une règle dans le pare-feu afin qu'il ne soit pas bloqué. Cela peut être fait dans votre installateur:

netsh.exe firewall set allowedprogram "{PROGRAM PATH}" "{PROGRAM NAME}" enable 
+0

Le problème avec cela est aussi son avantage. J'utilise de nombreuses instances de chaque application sur un serveur Terminal Server, comme dans plusieurs sessions possibles pour un seul utilisateur. En tant que tel, je ne peux pas utiliser quelque chose qui n'est pas conscient de la session. –

0

réponse de Kris est probablement encore le meilleur pari, mais vous auriez probablement besoin d'une bidouille pour maintenir la santé mentale avec le serveur terminal.

Quelle que soit l'application que vous souhaitez utiliser comme application "serveur", vous pouvez ouvrir un port inutilisé et l'afficher pour être entré dans l'application "client". Peut-être même en utilisant des variables d'environnement. Selon vos besoins, cette approche pourrait être erronée.

Si vous avez simplement deux applications où l'on doit être averti lorsque l'autre change (et non notifié de ce qui a réellement changé), vous pouvez probablement le faire en envoyant et en accrochant des messages Windows.

1

Les tubes nommés et les mailslots sont toujours parmi les meilleurs choix disponibles, et ils fonctionnent aussi bien pour les utilisateurs croisés que pour les processus croisés. Bien sûr, dans Vista +, il y a des problèmes avec des processus s'exécutant à différents niveaux d'intégrité, et la sécurité s'applique également aux systèmes d'exploitation antérieurs - un peu comme la sécurité des fichiers.

TCP est toujours nettement plus lent au sein de la même machine, probablement pire que WM_COPYDATA à travers les processus.

À l'aide de tuyaux ou de mailslots, vous pouvez gérer les services de terminal en faisant de l'ID de session une partie du nom. TCP sera toujours confronté à son "espace de noms" limité de numéros de port (imaginez un disque dur qui ne peut avoir que des fichiers nommés de 0 à 65535) et chaque connexion nécessite deux numéros de port.

Questions connexes