13.07.2015 Views

Creando un Servidor Remoto mediante Visual C# .NET - Willy .Net

Creando un Servidor Remoto mediante Visual C# .NET - Willy .Net

Creando un Servidor Remoto mediante Visual C# .NET - Willy .Net

SHOW MORE
SHOW LESS
  • No tags were found...

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

<strong>Creando</strong> <strong>un</strong> <strong>Servidor</strong> <strong>Remoto</strong> <strong>mediante</strong><strong>Visual</strong> <strong>C#</strong> .<strong>NET</strong>RESUMENEn este artículo se muestra cómo crear <strong>un</strong> sencillo servidor remoto al que puede tener accesootra aplicación. La aplicación que tiene acceso a este servidor se puede ubicar en el mismoequipo, en otro equipo o en otra red. El servidor remoto se divide en dos partes: el objeto deservidor y la aplicación de servidor. El objeto de servidor es el objeto con el que se com<strong>un</strong>ica elcliente, y la aplicación servidor se utiliza para registrar el objeto de servidor con el marco detrabajo de tiempo de ejecución Remoting.RequisitosLa lista siguiente describe el hardware, el software, la infraestructura y los service packrecomendados que se necesitarán:<strong>Visual</strong> Studio .<strong>NET</strong>En el presente artículo se da por supuesto que está familiarizado con los temas siguientes:<strong>Visual</strong> Studio .<strong>NET</strong><strong>Visual</strong> <strong>C#</strong> .<strong>NET</strong>RedesCrear el objeto de <strong>un</strong> servidor remotoEl primer paso para crear la aplicación de servidor consiste en crear el objeto de servidor. Elobjeto de servidor es el que utiliza la aplicación cliente para crear <strong>un</strong>a instancia y com<strong>un</strong>icarsecon él en el equipo servidor. La aplicación cliente lleva esto a cabo a través de <strong>un</strong> objeto deproxy que se crea en el cliente. En este ejemplo, el objeto de servidor reside en <strong>un</strong>a biblioteca declases (DLL) y se llama myRemoteClass.1. Cree <strong>un</strong>a nueva aplicación de biblioteca de clases en <strong>Visual</strong> <strong>C#</strong> .<strong>NET</strong>. Dé como nombreServerClass al proyecto. Class1 se crea de forma predeterminada.2. En el Explorador de soluciones, cambie el nombre del archivo de código de Class1.cs aServerClass.cs.3. Abra ServerClass.cs y cambie el nombre de Class1 a myRemoteClass. Asimismo, debecambiar el nombre del constructor predeterminado de la clase, de manera que coincidacon el nombre de la clase. myRemoteClass debe heredarse de la claseMarshalByRefObject. La definición de clase debe aparecer del siguiente modo:


public class myRemoteClass: MarshalByRefObject{public myRemoteClass(){}}//// PARA HACERLO: agregue <strong>un</strong>a lógica de constructor aquí//4. Agregue <strong>un</strong> método público a myRemoteClass, que toma <strong>un</strong>a cadena, muestra <strong>un</strong>mensaje en la consola con <strong>un</strong> valor de la cadena y devuelve True si la cadena no está vacía.public bool SetString(String sTemp){try{Console.WriteLine("Esta cadena '{0}' tiene <strong>un</strong>a longitud de {1}", sTemp,sTemp.Length);return sTemp != "";}catch{return false;}}5. Genere el proyecto para crear el ensamblado de ServerClass.dll.6. Guarde y cierre el proyecto.Crear la aplicación de <strong>un</strong> servidor remotoDespués de crear el objeto de servidor con el que se com<strong>un</strong>icará el cliente, debe registrar esteobjeto con el marco de trabajo Remoting. Al registrar el objeto, también debe iniciar el servidor yhacer que el servidor escuche en <strong>un</strong> puerto a los clientes que intentan conectarse a ese puerto.Para hacer esto, necesita <strong>un</strong> tipo de proyecto que genere <strong>un</strong> archivo ejecutable.


La razón para incluir el objeto de servidor en <strong>un</strong> proyecto independiente es que se pueda crearfácilmente <strong>un</strong>a referencia al objeto de servidor desde el proyecto del cliente. Si incluyó el objetode servidor en este proyecto, no podrá hacer referencias a él, ya que las referencias sólo sepueden establecer en archivos DLL.1. Para simplificar las cosas, cree <strong>un</strong>a nueva aplicación de consola en <strong>Visual</strong> <strong>C#</strong> .<strong>NET</strong> parainiciar el servidor remoto. Class1 se crea de forma predeterminada.2. En el Explorador de soluciones, cambie el nombre del archivo de Class1.cs aRemoteServer.cs.3. Agregue <strong>un</strong>a referencia al espacio de nombres System.R<strong>un</strong>time.Remoting.4. Agregue <strong>un</strong>a referencia al ensamblado ServerClass.dll que creó en la sección anterior.5. Utilice la instrucción using de los espacios de nombres Remoting, Remoting.Channelsy Remoting.Channels.TCP, para que no se le pida calificar en el código declaracionesen esos espacios de nombre más adelante. Debe utilizar la instrucción using antes quecualquier otra declaración.using System.R<strong>un</strong>time.Remoting;using System.R<strong>un</strong>time.Remoting.Channels;using System.R<strong>un</strong>time.Remoting.Channels.Tcp;6. Declare la variable apropiada. Declare e inicialice <strong>un</strong> objeto TcpChannel que escuche alos clientes que se conectan a <strong>un</strong> determinado puerto (en este ejemplo, el puerto 8085).Utilice el método RegisterChannel para registrar el canal con los servicios de canal.Agregue el siguiente código de declaración en el procedimiento Main de Class1:TcpChannel chan = new TcpChannel(8085); ChannelServices.RegisterChannel(chan);7. Llame al método RegisterWellKnownType del objeto RemotingConfiguration pararegistrar el objeto ServerClass con el marco de trabajo Remoting y especifique lossiguientes parámetros:1. El nombre de tipo completo del objeto que se está registrando (en este ejemplo,ServerClass.myRemoteClass) seguido por el nombre de ensamblado(ServerClass). Debe especificar aquí tanto el nombre del espacio de nombrescomo el nombre de la clase. Dado que no especificó <strong>un</strong> espacio de nombre en lasección anterior, se utilizará el espacio de nombre raíz predeterminado.2. Designe el extremo en el que el objeto se va a publicar como RemoteTest . Losclientes necesitan saber este nombre para conectarse al objeto.3. Utilice el modo de objeto SingleCall para especificar el parámetro final. El modode objeto especifica la duración del objeto cuando se activa en el servidor. En elcaso de los objetos SingleCall, se crea <strong>un</strong>a nueva instancia de la clase para cadallamada realizada por el cliente, a<strong>un</strong>que el mismo cliente llame al mismo métodomás de <strong>un</strong>a vez. Por el contrario, los objetos Singleton se crean sólo <strong>un</strong>a vez, ytodos los clientes se com<strong>un</strong>ican con el mismo objeto.RemotingConfiguration.RegisterWellKnownServiceType(System.Type.GetType("ServerClass.myRemoteClass, ServerClass"),"RemoteTest",WellKnownObjectMode.SingleCall);


8. Utilice el método ReadLine del objeto Console para mantener la aplicación de servidor enf<strong>un</strong>cionamientoSystem.Console.WriteLine("Presione para salir..."); System.Console.ReadLine();1. Genere el proyecto.2. Guarde y cierre el proyecto.Clase TCPChannelhttp://msdn.microsoft.com/library/default.asp?url=/library/enus/cpref/html/frlrfSystemR<strong>un</strong>timeRemotingChannelsTcpTcpChannelClassTopic.aspRegisterWellKnownServiceType methodhttp://msdn.microsoft.com/library/default.asp?url=/library/enus/cpref/html/frlrfSystemR<strong>un</strong>timeRemotingRemotingConfigurationClassRegisterWellKnownServiceTypeTopic.aspPublicado Originalmente en el Microsoft KB

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!