Existe-t-il un moyen de déclencher un événement en C# à partir d'une application externe? En particulier de Ruby? J'ai besoin de provoquer quelque chose en C# à partir d'une application de rails.Déclencher un événement en C# à partir d'une application externe?
Répondre
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:
- Using Named Pipes for Interprocess Communication In Ruby
- Communicating Between Ruby and PHP Using Named Pipes
Sur le.côté NET, voici quelques liens utiles pour explorer pour plus d'informations:
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.
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.
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.
- 1. Comment déclencher un événement dans une application asp.net à partir d'une application Silverlight
- 2. Mise à jour d'un événement en supprimant un événement externe
- 3. Comment déclencher un événement en utilisant addHandler
- 4. Déclencher un événement à partir d'une autre classe
- 5. Comment déclencher un événement en utilisant Xcode?
- 6. Comment déclencher un événement personnel en Javascript
- 7. Déclencher un événement par programme?
- 8. Comment déclencher une commande routée à partir d'un événement spécifié?
- 9. Comment déclencher un événement JavaScript cliquez sur
- 10. Comment déclencher un événement attaché dans wpf?
- 11. C# Attribute pour déclencher un événement sur l'invocation d'une méthode
- 12. Comment déclencher un événement JavaScript via C++ dans QWebView
- 13. Comment déclencher un événement de touche Ctrl + C avec jQuery?
- 14. Comment déclencher cet événement?
- 15. Comment déclencher un événement entre classes?
- 16. Lancement d'une application externe à partir de mon application
- 17. Comment faire pour déclencher un événement ComboBox SelectionChanged à partir d'un ListBoxItem imbriqué?
- 18. Exécuter un programme externe à partir du code C#
- 19. Comment déclencher un événement jQuery personnalisé à partir de Flash, en transmettant certaines données via l'objet événement?
- 20. Mise en application externe
- 21. Élever un événement en C#
- 22. Comment déclencher un événement à travers les classes?
- 23. Déclencher un événement avec le prototype
- 24. Déclencher un événement personnalisé dans Rx JS
- 25. Comment déclencher un événement onchange manuellement?
- 26. déclencher un événement par code dans android
- 27. Silverlight 3 Datatemplate: déclencher un événement button_click
- 28. Événement PropertyChanged, déclencher lors OnClick?
- 29. Quand déclencher un événement de contrôle personnalisé?
- 30. Comment déclencher un événement Onload/OnUnload à partir de FrameworkElement à des fins de test unitaire?
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
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