Uso de .Net Remoting

10/11/2004 - 12:54 por Hugo Fajardo | Informe spam
Buenos dias...

Les comento que estoy tratando de utilizar el .Net Remoting para acceder a
objetos remotamente en una red Lan. Pero el tema es que estuve tratando de
ver la ayuda en linea y los ejemplos no son muy didacticos.

Por ello agradeceré me envien algun ejemplo "de uso real", alguna
explicación o experiencias al implementar acceso remoto.

Saludos...

HUGO FAJARDO

Preguntas similare

Leer las respuestas

#1 Santi
11/11/2004 - 10:23 | Informe spam
Hola, a ver si te sirve este ejemplo:

using System.Runtime.Remoting.Channels; //To support and handle Channel and
channel sinks
using System.Runtime.Remoting;
using System.Runtime.Remoting.Channels.Tcp; //For HTTP channel


Del lado del servidor ( el que escucha ):

private void StartListener(int port)
{
// MSDN: If you want to register more than one TcpChannel, each must have
// a unique name. Set this property to the Empty string ("") if you want
//to ignore names, but avoid naming collisions.
IDictionary channelProperties = new Hashtable();
channelProperties["name"] = "";
channelProperties["port"] = port;
TcpChannel tcpChannel = new TcpChannel(channelProperties, null, null);

ChannelServices.RegisterChannel (tcpChannel); //Register channel
RemotingConfiguration.RegisterWellKnownServiceType(
typeof(SessionData),
"SessionData",
WellKnownObjectMode.Singleton);
}


Del lado del cliente ( SessionData es el objeto remoto ):

public SessionClient( string serverIpAddress, int clientPort, int
serverPort )
{
try
{
string url = "tcp://" + serverIpAddress + ":" + serverPort +
"/SessionData";

// MSDN: If you want to register more than one TcpChannel, each must
have
// a unique name. Set this property to the Empty string ("") if you want
//to ignore names, but avoid naming collisions.
IDictionary channelProperties = new Hashtable();
channelProperties["name"] = "";
channelProperties["port"] = clientPort;
TcpChannel tcpChannel = new TcpChannel(channelProperties, null, null);

ChannelServices.RegisterChannel (tcpChannel); //Register the channel
this.sessionData = (SessionData)Activator.GetObject(typeof(SessionData),
url);
}
catch(Exception e)
{
throw new Exception("Error conectando con el servidor", e);
}
}
Respuesta Responder a este mensaje
#2 Hugo Fajardo
11/11/2004 - 12:07 | Informe spam
Desde ya gracias por el ejemplo...

Pero... viendo el codigo me surgen un par de dudas:

1. Este codigo, en que clases estaria ubicado?
2. Como seria la comunicacion entre el servidor y el cliente?... es decir
como le pasaria una referencia a un objeto remoto?
3. Todo estaría en un solo proyecto? o necesitamos uno para el server y otro
para el client?

Esas dudas son las que se me vienen a la cabeza en este momento... para
aclarar mas el panorama.

Gracias y saludos
HUGO FAJARDO


"Santi" escribió en el mensaje
news:cmvanv$pqo$
Hola, a ver si te sirve este ejemplo:

using System.Runtime.Remoting.Channels; //To support and handle Channel


and
channel sinks
using System.Runtime.Remoting;
using System.Runtime.Remoting.Channels.Tcp; //For HTTP channel


Del lado del servidor ( el que escucha ):

private void StartListener(int port)
{
// MSDN: If you want to register more than one TcpChannel, each must


have
// a unique name. Set this property to the Empty string ("") if you


want
//to ignore names, but avoid naming collisions.
IDictionary channelProperties = new Hashtable();
channelProperties["name"] = "";
channelProperties["port"] = port;
TcpChannel tcpChannel = new TcpChannel(channelProperties, null, null);

ChannelServices.RegisterChannel (tcpChannel); //Register channel
RemotingConfiguration.RegisterWellKnownServiceType(
typeof(SessionData),
"SessionData",
WellKnownObjectMode.Singleton);
}


Del lado del cliente ( SessionData es el objeto remoto ):

public SessionClient( string serverIpAddress, int clientPort, int
serverPort )
{
try
{
string url = "tcp://" + serverIpAddress + ":" + serverPort +
"/SessionData";

// MSDN: If you want to register more than one TcpChannel, each must
have
// a unique name. Set this property to the Empty string ("") if you


want
//to ignore names, but avoid naming collisions.
IDictionary channelProperties = new Hashtable();
channelProperties["name"] = "";
channelProperties["port"] = clientPort;
TcpChannel tcpChannel = new TcpChannel(channelProperties, null, null);

ChannelServices.RegisterChannel (tcpChannel); //Register the channel
this.sessionData (SessionData)Activator.GetObject(typeof(SessionData),
url);
}
catch(Exception e)
{
throw new Exception("Error conectando con el servidor", e);
}
}


Respuesta Responder a este mensaje
#3 Santi
15/11/2004 - 17:14 | Informe spam
Hola, perdona que haya tardado tanto en responder,

Tienes que crear dos clases, una cliente y otra servidor, eso lo puedes
tener en uno o dos proyectos, como prefieras. Tienes que tener luego dos
proyectos, uno que instancia el servidor y otro que instancia el cliente.

La referencia al objeto remoto se hace aqui:

this.sessionData = (SessionData)Activator.GetObject(typeof(SessionData),
url);

para ello el servidor tiene que estar exponiendo el objeto. Eso lo puedes
comprobar desde un navegador.

Te envio a tu correo un ejemplo funcionando.

un saludo.




"Hugo Fajardo" escribió en el mensaje
news:
Desde ya gracias por el ejemplo...

Pero... viendo el codigo me surgen un par de dudas:

1. Este codigo, en que clases estaria ubicado?
2. Como seria la comunicacion entre el servidor y el cliente?... es decir
como le pasaria una referencia a un objeto remoto?
3. Todo estaría en un solo proyecto? o necesitamos uno para el server y


otro
para el client?

Esas dudas son las que se me vienen a la cabeza en este momento... para
aclarar mas el panorama.

Gracias y saludos
HUGO FAJARDO


"Santi" escribió en el mensaje
news:cmvanv$pqo$
> Hola, a ver si te sirve este ejemplo:
>
> using System.Runtime.Remoting.Channels; //To support and handle Channel
and
> channel sinks
> using System.Runtime.Remoting;
> using System.Runtime.Remoting.Channels.Tcp; //For HTTP channel
>
>
> Del lado del servidor ( el que escucha ):
>
> private void StartListener(int port)
> {
> // MSDN: If you want to register more than one TcpChannel, each must
have
> // a unique name. Set this property to the Empty string ("") if you
want
> //to ignore names, but avoid naming collisions.
> IDictionary channelProperties = new Hashtable();
> channelProperties["name"] = "";
> channelProperties["port"] = port;
> TcpChannel tcpChannel = new TcpChannel(channelProperties, null,


null);
>
> ChannelServices.RegisterChannel (tcpChannel); //Register channel
> RemotingConfiguration.RegisterWellKnownServiceType(
> typeof(SessionData),
> "SessionData",
> WellKnownObjectMode.Singleton);
> }
>
>
> Del lado del cliente ( SessionData es el objeto remoto ):
>
> public SessionClient( string serverIpAddress, int clientPort, int
> serverPort )
> {
> try
> {
> string url = "tcp://" + serverIpAddress + ":" + serverPort +
> "/SessionData";
>
> // MSDN: If you want to register more than one TcpChannel, each must
> have
> // a unique name. Set this property to the Empty string ("") if you
want
> //to ignore names, but avoid naming collisions.
> IDictionary channelProperties = new Hashtable();
> channelProperties["name"] = "";
> channelProperties["port"] = clientPort;
> TcpChannel tcpChannel = new TcpChannel(channelProperties, null,


null);
>
> ChannelServices.RegisterChannel (tcpChannel); //Register the channel
> this.sessionData > (SessionData)Activator.GetObject(typeof(SessionData),
> url);
> }
> catch(Exception e)
> {
> throw new Exception("Error conectando con el servidor", e);
> }
> }
>
>


Respuesta Responder a este mensaje
#4 Hugo Fajardo
16/11/2004 - 12:25 | Informe spam
Gracias por responder...

Todavia no recibi el mail con el ejemplo, el cual te agradeceré
infinitamente.

Por favor, te pido que envies el mail con el ejemplo a esta direccion:


Saludos...
HUGO FAJARDO


"Santi" escribió en el mensaje
news:cnakbd$s5d$
Hola, perdona que haya tardado tanto en responder,

Tienes que crear dos clases, una cliente y otra servidor, eso lo puedes
tener en uno o dos proyectos, como prefieras. Tienes que tener luego dos
proyectos, uno que instancia el servidor y otro que instancia el cliente.

La referencia al objeto remoto se hace aqui:

this.sessionData = (SessionData)Activator.GetObject(typeof(SessionData),
url);

para ello el servidor tiene que estar exponiendo el objeto. Eso lo puedes
comprobar desde un navegador.

Te envio a tu correo un ejemplo funcionando.

un saludo.




"Hugo Fajardo" escribió en el mensaje
news:
> Desde ya gracias por el ejemplo...
>
> Pero... viendo el codigo me surgen un par de dudas:
>
> 1. Este codigo, en que clases estaria ubicado?
> 2. Como seria la comunicacion entre el servidor y el cliente?... es


decir
> como le pasaria una referencia a un objeto remoto?
> 3. Todo estaría en un solo proyecto? o necesitamos uno para el server y
otro
> para el client?
>
> Esas dudas son las que se me vienen a la cabeza en este momento... para
> aclarar mas el panorama.
>
> Gracias y saludos
> HUGO FAJARDO
>
>
> "Santi" escribió en el mensaje
> news:cmvanv$pqo$
> > Hola, a ver si te sirve este ejemplo:
> >
> > using System.Runtime.Remoting.Channels; //To support and handle


Channel
> and
> > channel sinks
> > using System.Runtime.Remoting;
> > using System.Runtime.Remoting.Channels.Tcp; //For HTTP channel
> >
> >
> > Del lado del servidor ( el que escucha ):
> >
> > private void StartListener(int port)
> > {
> > // MSDN: If you want to register more than one TcpChannel, each


must
> have
> > // a unique name. Set this property to the Empty string ("") if you
> want
> > //to ignore names, but avoid naming collisions.
> > IDictionary channelProperties = new Hashtable();
> > channelProperties["name"] = "";
> > channelProperties["port"] = port;
> > TcpChannel tcpChannel = new TcpChannel(channelProperties, null,
null);
> >
> > ChannelServices.RegisterChannel (tcpChannel); //Register channel
> > RemotingConfiguration.RegisterWellKnownServiceType(
> > typeof(SessionData),
> > "SessionData",
> > WellKnownObjectMode.Singleton);
> > }
> >
> >
> > Del lado del cliente ( SessionData es el objeto remoto ):
> >
> > public SessionClient( string serverIpAddress, int clientPort, int
> > serverPort )
> > {
> > try
> > {
> > string url = "tcp://" + serverIpAddress + ":" + serverPort +
> > "/SessionData";
> >
> > // MSDN: If you want to register more than one TcpChannel, each


must
> > have
> > // a unique name. Set this property to the Empty string ("") if


you
> want
> > //to ignore names, but avoid naming collisions.
> > IDictionary channelProperties = new Hashtable();
> > channelProperties["name"] = "";
> > channelProperties["port"] = clientPort;
> > TcpChannel tcpChannel = new TcpChannel(channelProperties, null,
null);
> >
> > ChannelServices.RegisterChannel (tcpChannel); //Register the


channel
> > this.sessionData > > (SessionData)Activator.GetObject(typeof(SessionData),
> > url);
> > }
> > catch(Exception e)
> > {
> > throw new Exception("Error conectando con el servidor", e);
> > }
> > }
> >
> >
>
>


Respuesta Responder a este mensaje
#5 Santi
17/11/2004 - 10:29 | Informe spam
Enviado a esta dirección.

Un saludo.

Hugo Fajardo wrote:


Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida