Écouter les événements dans une autre application
Supposons que j'ai deux applications écrites en C#. La première est une application tierce qui déclenche un événement appelé "OnEmailSent".
La deuxième est une application personnalisée, que je n'ai écrit que je voudrais en quelque sorte de s'abonner à la "OnEmailSent" même de la première demande.
Est-il une manière que je pourrais m'attacher le deuxième application d'une instance de la première application pour écouter les "OnEmailSent" événement?
Donc pour plus de précisions, mon scénario, c'est que nous avons une coutume troisième partie application écrite en c# qui soulève une "OnEmailSent" de l'événement. Nous pouvons voir l'événement n'existe à l'aide de réflecteur.
Ce que nous voulons faire est de quelques autres actions ont lieu lors de ce composant envoie un e-mail.
Le moyen le plus efficace que nous pouvons penser serait d'être en mesure d'utiliser une certaine forme de l'IPC, comme anders suggéré et écouter de la OnEmailSent événement déclenché par le tiers de la composante.
Parce que le composant est écrit en C# nous jongle avec l'idée d'écrire une autre application en C# qui peut s'attacher à l'exécution de processus et quand il détecte la OnEmailSent événement a été élever il va exécuter son propre code de gestion des événements.
J'ai peut-être raté quelque chose, mais ce que je comprends de la façon dont l'accès distant fonctionne est qu'il y aurait besoin d'être un serveur de définir une sorte de contrat que le client peut s'abonner à.
J'étais plus penser à un scénario où quelqu'un a écrit une application autonome comme outlook par exemple, qui expose des événements que je tiens à vous abonner à partir d'une autre application.
Je suppose que le scénario que je suis en train de penser est la .net débogueur et comment elle peut se fixer à l'exécution des assemblages d'inspecter le code alors qu'il est en cours d'exécution.
OriginalL'auteur lomaxx | 2008-08-20
Vous devez vous connecter pour publier un commentaire.
Pour deux applications (processus distincts) pour échanger des événements, ils doivent s'entendre sur la façon dont ces événements sont communiquées. Il ya beaucoup de façons différentes de le faire, et exactement de la méthode à utiliser peut dépendre de l'architecture et du contexte. Le terme général pour ce genre d'échange d'informations entre les processus est Communication Inter-processus (IPC). Il existe beaucoup de façons de faire de la CIB, les plus courantes étant des fichiers, des tuyaux (réseau) sockets, les appels de procédure distante (RPC) et de la mémoire partagée. Sur Windows, il est également courant d'utiliser la fenêtre de messages.
Je ne suis pas sûr de savoir comment cela fonctionne pour .NET/C# des applications sur Windows, mais en natif des applications Win32, vous pouvez crochet dans la boucle de message de processus externe, et de la "espion" sur les messages qu'ils envoient. Si votre programme génère un message d'événement lorsque la fonction est appelée, ce peut être une façon de le détecter.
Si vous êtes à la mise en œuvre de ces deux applications vous-même vous pouvez choisir d'utiliser toute la CIB méthode que vous préférez. Les sockets réseau et un niveau supérieur de prise à base de protocoles comme HTTP, XML-RPC et SOAP sont très populaires ces jours-ci, ils vous permettent de faire tourner les applications sur différentes machines (étant donné qu'ils sont connectés via un réseau).
OriginalL'auteur Anders Sandvig
Vous pouvez essayer Géré Espion et pour la programmation ManagedSpyLib
Mais cela pourrait ne pas fonctionner pour vous, dépend de savoir si ControlProxy peut en quelque sorte l'accès à l'événement que vous cherchez dans votre application tierce.
Vous pouvez également utiliser Reflexil
OriginalL'auteur lubos hasko
Vous pouvez soit utiliser l'accès distant ou de la WCF. Voir http://msdn.microsoft.com/en-us/library/aa730857(SV.80).aspx#netremotewcf_topic7.
OriginalL'auteur Mark Cidade
Quelle est la nature de cette OnEmailSent événement à partir de cette application tierce? Je veux dire, comment savez-vous que l'application est le déclenchement d'un tel événement?
Si vous prévoyez de communication interprocessus, la première question que vous devez vous poser est: Est-il vraiment nécessaire?
Sans remettre en cause vos motivations, si vous avez vraiment besoin de faire de la communication interprocessus, vous aurez besoin d'une sorte de mécanisme. La liste est longue, très longue. De la simple WM_DATA des messages personnalisés protocoles TCP très complexe de services Web nécessitant des infrastructures.
Ce qui amène la question, qu'est-ce que vous essayez de faire exactement? Qu'est-ce que cette application tierce que vous n'avez aucun contrôle sur?
Aussi, le débogueur a un très invasive de débogage du processus. Ne vous attendez pas à être la norme interprocessus mécanisme utilisé par toutes les autres applications. Comme une question de fait, il n'est pas.
OriginalL'auteur Coincoin
Vous pouvez mettre en œuvre un scénario similaire avec de requête SQL Server 2005 notifications de changement par maintaing persistant SqlConnection avec un .NET application qui bloque jusqu'à ce que des modifications de données dans la base de données.
Voir http://www.code-magazine.com/article.aspx?quickid=0605061.
OriginalL'auteur Mark Cidade