Estoy teniendo un pequeño problema con una clase de singleton que estoy exponiendo a través de la comunicación remota. En mi servidor tengo:Trabajando con singletons en .Net Remoting
TcpChannel channel = new TcpChannel(Settings.Default.RemotingPort);
ChannelServices.RegisterChannel(channel, false);
RemotingConfiguration.RegisterWellKnownServiceType(
typeof(RemotableObject), "RemotableObject",
WellKnownObjectMode.Singleton);
RemotableObject es un objeto único que hereda MarshalByRefObject.
Mi cliente se conecta a ella a través de:
remoteObject = (RemotableObject)Activator.GetObject(
typeof(RemotableObject),
string.Format("tcp://{0}:{1}/RemotableObject", serverIP, serverPort));
Todo funciona muy bien en cuanto a la interacción remota va, pero cuando accedo al objeto único en mi código de servidor de esta manera:
int someValue = RemotableObject.Instance.SomeDynamicValue;
Se accede a una instancia diferente a la de los clientes. También he verificado que el constructor privado en RemotableObject recibe dos veces durante la depuración.
Puedo obtener el comportamiento deseado si obtengo una instancia de RemotableObject a través de la comunicación remota en el código de mi servidor, pero ¿hay alguna forma de que pueda acceder al mismo objeto que mis clientes desde el servidor sin la conexión remota?
¡Eso funcionó perfectamente! ¡Gracias por la rápida respuesta! – Todd
¿Cuál debería ser el valor de 'MesgURI'? Mi canal tcp se llama 'UsersTcp' y lo he intentado con ese nombre y con el uri:' tcp: // localhost: 5000/UserTcp' y ambos me dan un error de "no se encontró servicio". – moondaisy
Debe ser 'tcp: // [ServerName]: [PortNumber]/MesgUri' como en' tcp: // MYSERVERNAME: 5212/UsersTcp' –