Mittels IPC ist es möglich, Funktionen und Eigenschaften in lokalen oder entfernten Prozessen aufzurufen, bzw. Daten zw. Prozessen auszutauschen. Folgendes Beispiel registriert ein Objekt vom Typ MyRemoteObject über IPC und zeigt den Zugriff aus einem Prozess heraus.
// einfaches Interface definieren public interface ISharedAssemblyInterface { int Add(int a, int b); } // Klasse, die eine Berechnungsfunktion (Add) hat, definieren public class MyRemoteObject : MarshalByRefObject, ISharedAssemblyInterface { public MyRemoteObject() { } public int Add(int a, int b) { return a + b; } }
- Formularklasse mit 2 Buttons und 1 Label, die Server und Client beinhaltet
- durch Klicken auf Button1 wird das Objekt EINMAL registriert, welches dann von ALLEN weiteren Instanzen über Button2 abgerufen werden kann
using System.Runtime.Remoting; using System.Runtime.Remoting.Channels; using System.Runtime.Remoting.Channels.Ipc; // unter "Verweise" im Projekt hinzufügen public partial class Form1 : Form { // Kommunikationsparameter string sUniqueName = "InstanceControl"; string sUniquePortName = "InstanceControlIPCPort"; string sURLClient = "ipc://"; string sURLService; public Form1() { InitializeComponent(); sURLClient += sUniquePortName + "/" + sUniqueName; sURLService = sUniqueName; } // Server starten private void button1_Click(object sender, EventArgs e) { // IPC Kanal registrieren ChannelServices.RegisterChannel(new IpcChannel(sUniquePortName), false); RemotingConfiguration.ApplicationName = sUniqueName; // Klasse MyRemoteObject unter best. Namen registrieren RemotingConfiguration.RegisterWellKnownServiceType(typeof(MyRemoteObject), sURLService, WellKnownObjectMode.SingleCall); } // Client-Anfrage private void button2_Click(object sender, EventArgs e) { // registriertes Objekt vom Typ ISharedAssemblyInterface über Adresse sURLClient suchen ISharedAssemblyInterface obj = (ISharedAssemblyInterface)Activator.GetObject(typeof(ISharedAssemblyInterface), sURLClient); if (obj != null) { // Funktion des Objektes ausführen label1.Text = obj.Add(10, 10).ToString(); } } }