¡Esta es una revisión vieja del documento!
Son utilizados para realizar una comunicación entre procesos que están corriendo en la misma máquina (IPC, inter-process communication). Y son más rápidos que utilizar rutinas sobre red, son algo parecidas a las Named Pipes existentes en el kernel32.dll.
Para poder usar dichos canales se necesitan los siguientes elementos:
También necesitaremos agregar una referencia a System.Runtime.Remoting. Y hacer using de unos cuantos namespaces:
using System.Runtime.Remoting.Channels.Ipc; using System.Runtime.Remoting.Channels; using System.Runtime.Remoting;
Un dominio de aplicación es un proceso dentro del sistema operativo donde una o más aplicaciones residen. Los objetos que se encuentran en el mismo dominio de aplicación se comunican directamente, en cambio, los que están en distintos dominios se comunican a partir del transporte de copias de estos objetos. Existe una clase (System.MarshalByRefObject) que sirve como clase base para las clases que intervengan la comunicación e intercambio de mensajes entre dominios de aplicación (si no heredasen serían marshal by value).
Necesitaremos crear la clase de los objetos que se compartirán (ha de heredar de MarshalByRefObject).
namespace SharedObjects { public class Class1 : MarshalByRefObject { string v; public string Value { get { return this.v; } set { this.v = value; } } } }
IpcServerChannel server = new IpcServerChannel("myChannel"); ChannelServices.RegisterChannel(server, false); RemotingConfiguration.RegisterWellKnownServiceType(typeof(SharedObjects.Class1), "sharedObjs", WellKnownObjectMode.Singleton); SharedObjects.Class1 c = (SharedObjects.Class1)Activator.GetObject(typeof(SharedObjects.Class1), "ipc://myChannel/sharedObjs"); c.Value = "Servidor";
IpcClientChannel icc = new IpcClientChannel(); ChannelServices.RegisterChannel(icc, true); RemotingConfiguration.RegisterWellKnownClientType(typeof(SharedObjects.Class1), "ipc://myChannel/sharedObjs"); SharedObjects.Class1 c = (SharedObjects.Class1)Activator.GetObject(typeof(SharedObjects.Class1), "ipc://myChannel/sharedObjs"); Console.WriteLine(c.Value);
El fichero que configura la aplicación es el app.config y se ha de encontrar en el directorio donde está el ensamblado ejecutable de la aplicación.
Para leer el valor logFile de un fichero de configuración como el que sigue:
<?xml version="1.0" encoding="utf-8" ?> <configuration> <appSettings> <add key="logFile" value="log.txt"/> </appSettings> </configuration>
Utilizaremos un objeto de la clase AppSettingsReader y su método GetValue:
new System.Configuration.AppSettingsReader().GetValue("logFile", typeof(String))
Podemos agregar secciones personalizadas al fichero, por ejemplo una sola para el tema de log, para ello deberemos declararla entro de la tag configSections indicando nombre y tipo como sigue:
<?xml version="1.0" encoding="utf-8" ?> <configuration> <configSections> <section name="log" type="System.Configuration.DictionarySectionHandler" /> </configSections> <appSettings> </appSettings> <log> <add key="logFile" value="log.txt"/> </log> </configuration>
Para leer estas secciones