2010-09-27 4 views

Répondre

6

Je suppose que par "application externe" vous voulez dire quelque chose qui est en dehors de l'espace de processus du code C#. En outre, je suppose que vous ne faites pas référence à des événements C# - qui ne sont pas un concept qui existe en dehors du domaine d'implémentation de .NET - ils ne sont pas quelque chose qui est accessible depuis l'extérieur du code. Donc, la réponse générale à cette question est "oui c'est possible" - mais comme vous essayez essentiellement d'envoyer des notifications inter-processus, vous allez devoir utiliser une sorte de IPC mechanism.

.NET dispose d'une API riche pour l'exécution de l'IPC, allant des tubes nommés, à DCOM, aux protocoles réseau de bas niveau comme TCP/IP. L'approche que vous utilisez dépend de l'environnement dans lequel ces processus doivent communiquer (sur une seule machine, sur des machines sur un intranet, sur Internet, etc.). Cela dépendra aussi du type d'information que vous échangez et de l'effort que vous êtes prêt à consacrer. Pour les applications .NET 3.5, vous pouvez généralement trouver une implémentation prise en charge en utilisant WCF as the unifying framework. De toute évidence, tout cela dépend de votre capacité à modifier l'implémentation (lire le code source) de l'application .NET dans laquelle vous essayez d'élever un événement. Si vous ne pouvez pas faire cela, et qu'il n'y a aucun mécanisme IPC existant dans ce code, vous êtes probablement bloqué.

MISE À JOUR: En réponse à votre commentaire:

Que recommanderiez-vous avec une priorité de la facilité et le temps. Les deux applications sont en cours d'exécution sur la même machine, et je les écris moi-même à la fois

j'envisager d'utiliser Named Pipes. Les tubes nommés sont à l'origine un concept Unix - mais ils sont également disponibles sous Windows. Ils ont une interface de programmation simple (ils sont similaires à travailler avec des fichiers), et ne nécessitent pas beaucoup à utiliser dans un scénario de machine unique.

Du côté Ruby (que je connais moins avec), voici un lien que vous trouverez peut-être utile:

Sur le.côté NET, voici quelques liens utiles pour explorer pour plus d'informations:

+0

Vos hypothèses sont correctes. Que recommanderiez-vous avec la priorité de la facilité et du temps. Les deux applications fonctionnent sur la même machine, et je les écris moi-même. – tybro0103

+0

Pour ce que vous décrivez, je chercherais probablement à utiliser des tubes nommés. IIRC, Ruby a des bibliothèques intégrées qui facilitent l'interaction avec les pipes nommés, et dans .NET il y a un certain nombre d'API intégrées pour effectuer des lectures/écritures asynchrones sur des pipes nommées. De plus, la WCF a aussi un soutien pour eux. Je mettrai à jour ma réponse pour fournir des liens vers des ressources pertinentes. – LBushkin

1

Une solution évidente serait d'utiliser un type de message réseau. Soit une connexion TCP/IP de courte durée, soit - en particulier si les deux applications sont sur le même hôte - un simple paquet UDP. L'application C# acceptait les connexions (si TCP), lisait les événements du socket et les traitait enfin.

0

Pour développer la réponse de Martin, vous pourriez envisager un protocole de messagerie avec les bibliothèques disponibles dans les deux langues cibles. Quelque chose comme Stomp vient à l'esprit.

0

Vous pourriez probablement faire quelque chose avec des files d'attente de messages, en particulier une qui prend en charge plusieurs plates-formes et langauges, comme ActiveMQ. Je suppose qu'il aurait la capacité d'ajouter un gestionnaire pour un événement reçu de message afin que vous puissiez obtenir une livraison asynchrone.

Questions connexes