Vous êtes sur la page 1sur 6

Alojar un objeto remoto en un servicio de Windows

Los objetos a los que se llama mediante la infraestructura .NET Remoting se pueden alojar en ASP.NET, en ejecutables personalizados o en servicios de Windows. En este artculo se muestra cmo alojar un objeto remoto en un servicio de Windows y llamarlo desde una aplicacin Web ASP.NET. En este artculo se describe cmo alojar un objeto remoto en un servicio de Windows y llamarlo desde una aplicacin Web ASP.NET.

Notas
Los objetos remotos (objetos .NET a los que se tiene acceso de forma remota mediante la tecnologa .NET Remoting) se pueden alojar en servicios de Windows, en ejecutables personalizados o en ASP.NET. Para comunicarse con los objetos remotos alojados en ejecutables personalizados o en servicios de Windows, los clientes utilizan el canal TCP. Para comunicarse con los objetos remotos alojados en ASP.NET, los clientes utilizan el canal HTTP. Si la seguridad es lo ms importante, aloje los objetos en ASP.NET y utilice el canal HTTP. Esto le permite beneficiarse de las caractersticas de seguridad subyacentes de ASP.NET e IIS. Para obtener informacin acerca de cmo alojar un objeto remoto en ASP.NET (con IIS), consulte el artculo Q312107, "HOW TO: Host a Remote Object in IIS" (en ingls), en Microsoft Knowledge Base. Si el rendimiento es lo ms importante, aloje los objetos en un servicio de Windows y utilice el canal TCP. Con esta opcin no se proporciona seguridad integrada.

Requisitos
A continuacin se describen las recomendaciones de hardware, software, infraestructura de red, conocimientos y Service Pack que se necesitan. Sistema operativo Microsoft Windows 2000 Sistema de desarrollo Microsoft Visual Studio .NET Para llevar a cabo los procedimientos de este artculo, tambin es necesario que tenga conocimientos de la herramienta de desarrollo Microsoft Visual C#.

Resumen
En este artculo se incluyen los siguientes procedimientos: 1. Crear la clase de objetos remotos

2. Crear una aplicacin host de servicios de Windows 3. Crear una cuenta de Windows para ejecutar el servicio 4. Instalar el servicio de Windows 5. Crear una aplicacin cliente de prueba

1. Crear la clase de objetos remotos


En este procedimiento se crea una sencilla clase de objetos remotos. Se proporciona un nico mtodo llamado Add, que suma dos nmeros y devuelve el resultado. Para crear la clase de objetos remotos 1. Inicie Visual Studio .NET y cree un nuevo proyecto de biblioteca de clases de Visual C# con el nombre RemoteObject. 2. Utilice el Explorador de soluciones para cambiar el nombre del archivo class1.cs por Calculator.cs. 3. En el archivo Calculator.cs, cambie el nombre de Class1 por Calculator, y cambie el nombre del constructor predeterminado de igual manera. 4. Derive la clase Calculator de MarshalByRefObject para que se pueda utilizar en modo remoto.
public class Calculator : MarshalByRefObject

4. Agregue a la clase Calculator el siguiente mtodo pblico.


public int Add( int operand1, int operand2 ) { return operand1 + operand2; }

5. En el men Generar, haga clic en Generar solucin.

2. Crear una aplicacin host de servicios de Windows


En este procedimiento se crea una aplicacin de servicios de Windows que se utilizar para alojar el objeto remoto. Al iniciarse el servicio se configurar el canal remoting TCP para escuchar solicitudes de clientes. Nota: en este procedimiento se utiliza una clase Installer y la utilidad de lnea de comandos Installutil.exe para instalar el servicio de Windows. Para desinstalar el servicio, ejecute Installutil.exe con el modificador /u. Como alternativa, puede utilizar un proyecto de instalacin e implementacin para ayudar a instalar y desinstalar el servicio de Windows. Para crear una aplicacin host de servicios de Windows 1. Agregue a la solucin actual un nuevo proyecto de servicio de Windows de Visual C# con el nombre RemotingHost. 2. Utilice el Explorador de soluciones para cambiar el nombre de Service1.cs por RemotingHost.cs. 3. En el archivo RemotingHost.cs, cambie el nombre de la clase Service1 por HostService, y cambie el nombre del constructor predeterminado de igual manera.

4. Al principio del archivo, agregue la siguiente instruccin using debajo de las instrucciones using existentes.
using System.Runtime.Remoting;

5. Busque el mtodo Main y reemplace la lnea de cdigo existente que inicializa la variable ServicesToRun por el cdigo que se indica a continuacin.
ServicesToRun = new System.ServiceProcess.ServiceBase[] { new HostService() };

6. Busque el mtodo InitializeComponent y establezca la propiedad ServiceName en RemotingHost.


this.ServiceName = "RemotingHost";

7. Busque el mtodo OnStart y agregue la siguiente lnea de cdigo para configurar la interaccin remota (remoting). La ruta de acceso completa del archivo de configuracin se pasar al servicio como un parmetro de inicio.
RemotingConfiguration.Configure(args[0]);

8. Agregue al proyecto un nuevo archivo de clase de C# con el nombre HostServiceInstaller. 9. Agregue una referencia de ensamblado al ensamblado System.Configuration.Install.dll. 10. Al principio de HostServiceInstaller, agregue las siguientes instrucciones using debajo de la instruccin using existente.
using System.ComponentModel; using System.ServiceProcess; using System.Configuration.Install;

11. Derive la clase HostServiceInstaller de la clase Installer.


public class HostServiceInstaller : Installer

12. Agregue el atributo RunInstaller en el nivel de la clase como se indica a continuacin.


[RunInstaller(true)] public class HostServiceInstaller : Installer

13. Agregue a la clase HostServiceInstaller las dos variables miembro privadas siguientes. Los objetos se utilizarn al instalar el servicio.
private ServiceInstaller HostInstaller; private ServiceProcessInstaller HostProcessInstaller;

14. Agregue el cdigo siguiente al constructor de la clase HostServiceInstaller.


HostInstaller = new ServiceInstaller(); HostInstaller.StartType = System.ServiceProcess.ServiceStartMode.Manual; HostInstaller.ServiceName = "RemotingHost"; HostInstaller.DisplayName = "Calculator Host Service"; Installers.Add (HostInstaller); HostProcessInstaller = new ServiceProcessInstaller(); HostProcessInstaller.Account = ServiceAccount.User; Installers.Add (HostProcessInstaller);

15. En el Explorador de soluciones, haga clic con el botn secundario del mouse (ratn) en RemotingHost, elija Agregar y, a continuacin, haga clic en Agregar nuevo elemento. 16. En la lista Plantillas, haga clic en Archivo de texto y utilice el nombre app.config para el archivo. Visual Studio .NET copia automticamente los archivos de configuracin que tienen el nombre app.config como parte del proceso de compilacin en la carpeta de salida (por ejemplo, <directorioProyecto>\bin\debug) y se cambia su nombre por <nombreAplicacin>.config. 17. Haga clic en Aceptar para agregar el nuevo archivo de configuracin. 18. Agregue los siguientes elementos al nuevo archivo de configuracin.
<configuration> <system.runtime.remoting> <application name="RemoteHostService"> <service> <wellknown type="RemoteObject.Calculator, RemoteObject" objectUri="RemoteObject.Calculator" mode="Singleton" /> </service> <channels> <channel ref="tcp" port="8085"> <serverProviders> <formatter ref="binary" /> </serverProviders> </channel> </channels> </application> </system.runtime.remoting> </configuration>

19. En el men Generar, haga clic en Generar solucin.

3. Crear una cuenta de Windows para ejecutar el servicio


En este procedimiento se crea una cuenta de Windows que se utiliza para ejecutar el servicio de Windows. Para crear una cuenta de Windows para ejecutar el servicio

1. Cree una nueva cuenta de usuario local llamada RemotingAccount. Escriba una contrasea y active la casilla de verificacin La contrasea nunca caduca. 2. En el grupo de programas Herramientas administrativas, haga clic en Directiva de seguridad local. 3. Utilice la herramienta Directiva de seguridad local para conceder a la nueva cuenta el privilegio Iniciar sesin como servicio.

4. Instalar el servicio de Windows


En este procedimiento se instala el servicio de Windows con la utilidad installutil.exe y, despus, se inicia el servicio. Para instalar el servicio de Windows 1. Abra una ventana de comandos y cambie al directorio Bin\Debug situado dentro de la carpeta del proyecto RemotingHost. 2. Ejecute la utilidad installutil.exe para instalar el servicio.
installutil.exe remotinghost.exe

3. En el cuadro de dilogo Establecer inicio de sesin del servicio, escriba el nombre de usuario y la contrasea de la cuenta creada anteriormente en el procedimiento 3, y haga clic en Aceptar. Vea la salida de la utilidad installutil.exe y confirme que el servicio se ha instalado correctamente. 4. Copie el ensamblado RemoteObject.dll en el directorio de salida del proyecto RemotingHost (RemotingHost\Bin\Debug). 5. En el grupo de programas Herramientas administrativas, inicie el complemento de MMC Servicios. 6. En la lista Servicios, haga clic con el botn secundario en Calculator Host Service y, a continuacin, haga clic en Propiedades. 7. Escriba la ruta de acceso completa del archivo de configuracin del servicio (remotinghost.exe.config) en el campo Parmetros de inicio. Nota: para llevarlo a cabo de forma rpida, seleccione y copie el contenido del campo Ruta de acceso al ejecutable, y pguelo en el campo Parmetros de inicio. Despus, adjunte la cadena ".config". 7. Haga clic en Iniciar para iniciar el servicio. 8. Confirme que el estado del servicio cambia a Iniciado. 9. Haga clic en Aceptar para cerrar el cuadro de dilogo Propiedades.

5. Crear una aplicacin cliente de prueba


En este procedimiento se crea una aplicacin de consola de prueba que se utiliza para llamar al objeto remoto en el servicio de Windows. Para crear una aplicacin cliente de prueba 1. Agregue a la solucin actual una nueva aplicacin de consola de Visual C# con el nombre RemotingClient. 2. En el Explorador de soluciones, haga clic con el botn secundario en RemotingClient y, a continuacin, haga clic en Establecer como proyecto de inicio.

3. Agregue una referencia de ensamblado al ensamblado System.Runtime.Remoting.dll. 4. Agregue una referencia de proyecto al proyecto RemoteObject. 5. Al principio del archivo class1.cs, agregue las siguientes instrucciones using debajo de las instrucciones using existentes.
using System.Runtime.Remoting.Channels; using System.Runtime.Remoting.Channels.Tcp; using RemoteObject;

6. Agregue el siguiente cdigo de prueba al mtodo Main para llamar e invocar al objeto Calculator alojado en el servicio de Windows.
TcpChannel chan = new TcpChannel(); ChannelServices.RegisterChannel(chan); Calculator calc = (Calculator)Activator.GetObject( typeof(RemoteObject.Calculator), "tcp://localhost:8085/RemoteObject.Calculator"); if (calc == null) System.Console.WriteLine("Could not locate server"); else Console.WriteLine("21 + 21 is : " + calc.Add(21,21) );

7. En el men Generar, haga clic en Generar solucin. 8. Ejecute la aplicacin cliente y confirme que se muestra el resultado correcto en la ventana de salida de la consola.

Referencias
Para obtener informacin acerca de cmo alojar un objeto remoto en ASP.NET (con IIS), consulte el artculo Q312107, "HOW TO: Host a Remote Object in IIS" (en ingls), en Microsoft Knowledge Base.

Vous aimerez peut-être aussi