Frage

Angenommen, ich habe zwei Anwendungen, die in C#geschrieben.Die erste ist eine Dritte Partei Anwendung, die ein Ereignis auslöst, genannt "OnEmailSent".

Die zweite ist eine benutzerdefinierte app, die ich geschrieben habe, das würde ich gerne irgendwie abonnieren "OnEmailSent" schon von der ersten Anwendung.

Gibt es eine Möglichkeit, dass ich irgendwie befestigen Sie die zweite Anwendung zu einer Instanz der ersten Anwendung zu hören "OnEmailSent" event?


So zur weiteren Klärung, mein spezifisches Szenario ist, dass wir eine benutzerdefinierte Drittanbieter-Anwendung in c# geschrieben, das wirft ein "OnEmailSent" Ereignis.Wir können sehen, dass das Ereignis besteht, mit Reflektor.

Was wir wollen zu tun ist, haben einige andere Aktionen, die stattfinden, wenn diese Komponente sendet eine E-Mail.

Der effizienteste Weg, die wir uns vorstellen können, wäre in der Lage, einige form von IPC als anders vorgeschlagen hat, und lauschen Sie dem OnEmailSent-Ereignis ausgelöst wird, durch die Dritte Komponente.

Da die Komponente in C# geschrieben ist, sind wir liebäugelt mit der Idee zu schreiben, eine andere C# - Anwendung, die anfügen können sich selbst an den ausführenden Prozess, und wenn es erkennen die OnEmailSent Veranstaltung wurde erhöhen Sie ausgeführt wird, es die eigene event-handling-code.


Ich könnte etwas vermissen, aber von dem, was ich verstehe, wie remoting funktioniert, ist, dass es würde werden müssen, um einen server zu definieren eine Art von Vertrag, die der client abonnieren kann.

Ich war mehr Gedanken über ein Szenario, in dem jemand geschrieben hat, eine eigenständige Anwendung wie outlook zum Beispiel, dass die Ereignisse verfügbar, die würde ich gerne abonnieren, um aus einer anderen Anwendung.

Ich denke, das Szenario, das ich mir vorstelle ist .net-debugger und wie man es befestigen kann zur Ausführung von Baugruppen prüfen Sie den code, während es läuft.

War es hilfreich?

Lösung

In Auftrag für zwei Anwendungen (separate Prozesse) zum austauschen von Ereignissen, müssen Sie sich, wie diese Ereignisse kommuniziert werden.Es gibt viele verschiedene Möglichkeiten, dies zu tun, und genau, welche Methode Sie verwenden, hängt möglicherweise von Architektur und Kontext.Der Allgemeine Begriff für diese Art von Informationsaustausch zwischen Prozessen Inter-Prozess-Kommunikation (IPC).Es gibt viele standard-Möglichkeiten, IPC, die häufigsten sind Dateien, pipes, (Netzwerk -) sockets, remote procedure calls (RPC) und shared-memory.Auf Windows ist es auch üblich, in Fenster, Nachrichten.

Ich bin nicht sicher, wie dies funktioniert .NET/C# - Anwendungen unter Windows, aber in nativen Win32-Anwendungen, die Sie können Haken auf, um die message loop der externen Prozesse und "spy" auf die Nachrichten, die Sie senden.Wenn Ihr Programm generiert eine Nachricht-Ereignis, wenn die gewünschte Funktion aufgerufen wird, könnte dies ein Weg sein, ihn zu erkennen.

Wenn Sie die beiden Anwendungen sich selbst, Sie können wählte zu verwenden IPC-Methode, die Sie bevorzugen.Netzwerk-sockets und höher-level-socket-basierte Protokolle wie HTTP, XML-RPC und SOAP sind sehr beliebt in diesen Tagen, als Sie erlauben, Sie betreiben die Anwendungen, die auf unterschiedlichen physikalischen Maschinen als gut (vorausgesetzt, Sie sind über ein Netzwerk verbunden).

Andere Tipps

Sie können versuchen, Managed Spy und für programmgesteuerten Zugriff ManagedSpyLib

ManagedSpyLib stellt eine Klasse genannt ControlProxy.Ein ControlProxy ist eine Darstellung einer System.Windows.Formen.Control in ein weiterer Prozess.ControlProxy erlaubt Sie get-oder set-Eigenschaften und abonnieren Sie Ereignisse, als ob Sie waren innerhalb der destination Prozess.Verwenden Sie für ManagedSpyLib automation testing, Ereignisprotokollierung für Kompatibilität cross-Prozess Kommunikations-oder whitebox-Test.

Aber dies könnte nicht für Sie arbeiten, hängt davon ab, ob ControlProxy irgendwie Zugriff auf das event du bist nach dem in der betreffenden Anwendung.

Sie könnten auch verwenden Reflexil

Reflexil erlaubt IL änderungen mit den leistungsstarken Mono.Cecil-Bibliothek geschrieben von Jb EVAIN.Reflexil läuft als Reflektor-plug-in und richtet sich vor allem gegen IL-code Handhabung.Dies wird erreicht, indem schlägt eine komplette Anleitung editor und durch die C#/VB.NET-code Injektion.

Was ist die Natur der OnEmailSent Ereignis von dieser Drittanbieter-Anwendung?Ich meine, wie Sie wissen, die Anwendung ist das auslösen solch eine Veranstaltung?

Wenn Sie planen, tun die Kommunikation zwischen Prozessen, die erste Frage, die Sie sich stellen sollten, ist:Ist es wirklich notwendig?

Ohne zu hinterfragen, Ihre Motive, wenn Sie wirklich brauchen, um zu tun, interprocess communication, müssen Sie irgendeine Art von Mechanismus.Die Liste ist lang, sehr lang.Von der einfachen WM_DATA Nachrichten an benutzerdefinierte TCP-Protokolle zu sehr komplexen Web-Dienste erfordern zusätzliche Infrastruktur.

Dies bringt die Frage, was es ist Sie versuchen, genau das zu tun?Was ist diese Dritte Partei Anwendung, die Sie keine Kontrolle haben?

Auch der debugger hat eine sehr invasive Art von debugging-Prozesse.Erwarten Sie nicht, dass das der standard der Mechanismus, der verwendet wird, die von allen anderen Anwendungen.Als eine Angelegenheit von der Tat, das ist es nicht.

Sie implementieren können, ein ähnliches Szenario mit SQL Server 2005 query Benachrichtigungen ändern, indem Sie maintaing einer persistenten SqlConnection mit ein .NET-Anwendung, die blockiert, bis Daten in der Datenbank geändert.

Finden http://www.code-magazine.com/article.aspx?quickid=0605061.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top