Cómo: Utilizar escasamente acoplados desde Visual Studio .NET

Seleccione idioma Seleccione idioma
Id. de artículo: 318185 - Ver los productos a los que se aplica este artículo
Este artículo se ha archivado. Se ofrece "tal cual" y no se volverá a actualizar.
Expandir todo | Contraer todo

En esta página

Resumen

Utilice a esta guía paso a paso para crear un ensamblado .NET que contiene un editor, un suscriptor y una interfaz para controlar eventos de correspondencia imprecisa en servicios de COM +.

Requisitos

En la lista siguiente se describe el hardware, el software, la infraestructura de red y los service pack recomendados que se necesitarán:
  • Microsoft Windows 2000 Professional, Microsoft Windows 2000 Server, Microsoft Windows XP Professional o Microsoft Windows XP Server.
  • Microsoft .NET framework.
  • Microsoft Visual Studio .NET.
  • Microsoft Visual C#. NET.
  • Microsoft COM +.
En este artículo se supone que está familiarizado con los temas siguientes:
  • COM y servicios empresariales.
  • Extender metadatos mediante atributos.

Crear un ensamblado .NET que eventos de correspondencia escasamente utiliza

El siguiente procedimiento crea un ensamblado .NET que contiene un editor, un suscriptor y una interfaz que controladores de correspondencia imprecisa eventos en los servicios COM +:
  1. Haga clic en Inicio , seleccione programas , elija Visual Studio.NET y, a continuación, haga clic en Microsoft Visual Studio .NET .
  2. Haga clic en nuevo proyecto .
  3. En Tipos de proyecto , haga clic en Proyectos de Visual C# .
  4. En plantillas , seleccione Aplicación para Windows .
  5. En el cuadro nombre , escriba HowToLCE y, a continuación, haga clic en Aceptar .

    Ahora tiene una solución que contiene el shell de una aplicación de Windows Forms.
  6. Crear una biblioteca de clases que contiene código para el publicador, el suscriptor y la interfaz que es compartida por ambos. En el menú archivo , elija Agregar proyecto y, a continuación, haga clic en Nuevo proyecto .
  7. En Tipos de proyecto , haga clic en Proyectos de Visual C# .
  8. En plantillas , haga clic en Biblioteca de clases .
  9. En el cuadro nombre , escriba ClassLibLCE y, a continuación, haga clic en Aceptar .
  10. En el Explorador de soluciones, bajo ClassLibLCE , haga clic con el botón secundario en referencias y, a continuación, haga clic en Agregar referencia .
  11. En la ficha .NET , bajo referencias , haga clic en System.EnterpriseServices y a continuación, haga clic en Seleccionar . Haga clic en Aceptar .
  12. Agregue las directivas Using siguientes al principio del archivo Class1.cs en clases de acceso de estos espacios de nombres:
    using System.EnterpriseServices;
    using System.Diagnostics;
    						
    al compilar el componente de Biblioteca de clases , se convierte en un ensamblado. NET. Después de registrarlo, pueden ejecutar en los servicios COM + dado que el publicador y suscriptor se derivan de EnterpriseServices.ServicedComponents() .
  13. Declarar la interfaz que compartirán estas dos clases. En el archivo Class1.cs, agregue el código siguiente después de public class Class1 :
    public interface IEvSink
    {
    	void OnEvent1();
    	void OnEvent2();
    }
    					
  14. Reemplace public class Class1 con el siguiente código para la clase de Publisher:
    [EventClass]
    public class MyPublisher : ServicedComponent, IEvSink
    {
    	public MyPublisher()
    	{
    	// 
    	// TODO: Add constructor logic here.
    	// 
    	}
    	public void OnEvent1()
    	{}	
    	public void OnEvent2()
    	{}
    	}
    						
    Observe la clase anterior está decorada con el atributo [EventClass]. Este atributo es crítica. Indica los servicios COM + que esta clase constituye la conexión entre el publicador y su subscriber(s). Cuando haya trabajado por todo el código en este artículo, observe que no son llamadas directas a la clase MyPublisher. En otras palabras, la interacción entre el publicador y suscriptor se controla mediante los servicios COM + mediante la clase con el atributo [EventClass]. Por lo tanto, el Editor no tiene ningún conocimiento directo de la subscriber(s). Cualquier suscriptor registrado con servicios COM + para esta aplicación utiliza la interfaz IEvSink puede recibir eventos desde el publicador.
  15. El bit final de código necesaria en la biblioteca de clases es para el suscriptor. Esta clase controla los eventos desencadenados por el publicador. En este caso, se cree una entrada simple en el registro de sucesos para mostrar que el suscriptor se notifica cuando se realiza una llamada a la interfaz publicada. Agregue el código siguiente después de la clase MyPublisher :
    public class MySubscriber : ServicedComponent, IEvSink
    {
    	EventLog ev = new EventLog("Application");
    
    	public void OnEvent1()
    	{
    		ev.Source = "ClassLibLCE";
    		ev.WriteEntry("OnEvent1 Fired");
    	}
    
    	public void OnEvent2()
    	{
    		ev.Source = "ClassLibLCE";
    		ev.WriteEntry("OnEvent2 Fired");
    	}
    }
    					
  16. Para utilizar el ensamblado compilado desde la biblioteca de clases, asígnele un nombre seguro. Para generar este par de claves criptográficas, utilice la herramienta SN (Sn.exe). Se encuentra en la carpeta \bin donde está instalada la documentación del Kit (SDK) el software del programador de .NET Framework. La herramienta SN es muy fácil de usar. La instrucción de línea de comandos utiliza la sintaxis siguiente:
    sn -k "C:\%DirectoryToPlaceKey%\%KeyName%.snk"
  17. Ejecutar este comando desde el símbolo del sistema de Visual Studio. NET. Haga clic en Inicio , seleccione programas , Visual Studio.NET , Herramientas de Visual Studio .NET y a continuación, haga clic en Visual Studio .NET . En el símbolo del sistema, escriba lo siguiente:
    sn -k "C:\ClassLibLCE\key.snk"
    Si el proyecto de biblioteca de clases no está en esta ruta de acceso, cambie la ruta de acceso a la raíz de la carpeta proyecto para el proyecto de biblioteca de clases.

    Se genera una clave. Para comprobar esto, en el Explorador de soluciones, seleccione ClassLibLCE y haga clic en el botón Mostrar todos los archivos en la barra de herramientas del Explorador de soluciones .

    Observe el elemento de key.snk bajo ClassLibLCE.
  18. Dado que esta clave aún no está asociada con el ensamblado de biblioteca de clases, crear esta asociación. En el Explorador de soluciones, bajo ClassLibLCE , haga doble clic en AssemblyInfo.cs . En AssemblyKeyFile , escriba lo siguiente entre las comillas existentes:
    "..\\..\\key.snk"
  19. Complete el código de toda la solución cableado hasta un formulario Windows Forms a la biblioteca de clases. Recuerde que este formulario es simplemente con fines de demostración. Básicamente actúa como un "instrumento de prueba". Agregue las referencias apropiadas.
    1. En Explorador de soluciones, bajo HowToLCE , haga clic con el botón secundario en referencias y, a continuación, haga clic en Agregar referencia en el menú contextual.
    2. En la ficha .NET , haga clic en System.EnterpriseServices .
    3. En la ficha proyectos , haga clic en ClassLibLCE .
    4. Haga clic en Seleccionar .
    5. Haga clic en Aceptar .

      Observe los elementos de System.EnterpriseServices y ClassLibLCE enumerados bajo referencias .
  20. En el Editor de código, haga clic en la ficha Form1.cs [Diseño] haga doble clic en cualquier lugar en el formulario para crear un controlador de eventos Form1_Load . Para este controlador de eventos, agregue el siguiente código.

    Observe que hay dos secciones. El primero es únicamente con el fin de registrar la biblioteca de clases. Se utiliza sólo una vez. El segundo desencadena los eventos de publisher.
    // Section #1
    // Register Class Library as a COM+ application.
        ClassLibLCE.MySubscriber l = new
        ClassLibLCE.MySubscriber ();
    
    // Section #2
    //  Call Events on Publisher
    //  ClassLibLCE.MyPublisher l = new ClassLibLCE.MyPublisher();
    //  l.OnEvent1();
    //  l.OnEvent2();
    					
  21. Presione F5 para ejecutar la aplicación y registrar la biblioteca de clases.

    Esto hace que el suscriptor accesible a, pero aún no registrado con servicios COM +. Después de carga el formulario, ciérrelo. Este es el método más sencillo de registrar a un ensamblado .NET para que puede aprovechar los servicios COM +. Sin embargo, para registrar en este modo debe haber iniciado sesión en el equipo local con derechos administrativos. Si los usuarios que utilizan la aplicación no tienen derechos administrativos en su equipo local, se puede registrar un ensamblado con la utilidad Regasm.exe para ellos cuando se implementa la aplicación.
  22. Ejecutar el complemento Servicios de componentes.

    No puede configurar suscriptores mediante atributos en .NET versión 1.0. Pero, puede hacer esto manualmente ejecutando el complemento de servicios de componentes: abrir Panel de control , haga doble clic en Herramientas administrativas y, a continuación, haga doble clic en Componentes servicios .

    Nota : si desea que se puede escribir código para automatizar los pasos siguientes mediante la biblioteca COM + 1.0 Administrador. Para obtener información adicional, ver el contenido de biblioteca en el Examinador de objetos.
  23. Expanda Servicios de componentes . Expanda equipos . Expanda Mi PC . Expanda aplicaciones COM + . Expanda ClassLibLCE . Expanda componentes . Expanda ClassLibLCE.MySubscriber .
  24. Haga clic con el botón secundario en la carpeta suscripciones , seleccione nuevo y, a continuación, haga clic en suscripción .
  25. En el Asistente COM + para nueva suscripción, haga clic en siguiente . Seleccione la opción suscribirse a la interfaz IEvSink . Haga clic en siguiente .
  26. En la página Seleccionar clase de eventos , haga clic en ClassLibLCE.MyPublisher . (Esto es la clase que estuviera decorada con el atributo [EventClass].) Haga clic en siguiente .
  27. Escriba el nombre que desee utilizar y haga clic para seleccionar la casilla de verificación habilitar esta suscripción inmediatamente . Haga clic en siguiente . Haga clic en Finalizar .

Código para el archivo de Class1.cs

using System;
using System.EnterpriseServices;
using System.Diagnostics;

namespace ClassLibLCE
{
       /// <summary>
       /// Summary description for Class1.
       /// </summary>
       [EventClass]
       public class MyPublisher : ServicedComponent, IEvSink
       {
	     public MyPublisher()
	     {
	     // 
	     // TODO: Add constructor logic here.
	     // 
	     }

	     public void OnEvent1()
	     {}	

	     public void OnEvent2()
	     {}
	     }

	     public class MySubscriber : ServicedComponent, IEvSink
	     {
		EventLog ev = new EventLog("Application");

		public void OnEvent1()
		{
			ev.Source = "ClassLibLCE";
			ev.WriteEntry("OnEvent1 Fired");
		}

		public void OnEvent2()
		{
			ev.Source = "ClassLibLCE";
			ev.WriteEntry("OnEvent2 Fired");
		}
	}

	public interface IEvSink
	{
		void OnEvent1();
		void OnEvent2();
	}
}
				

Código para el archivo AssemblyInfo.cs

using System.Reflection;
using System.Runtime.CompilerServices;

// 
// General information about an assembly is controlled through the 
// following set of attributes. Change these attribute values to modify
// the information associated with an assembly.
// 
[assembly: AssemblyTitle("")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("")]
[assembly: AssemblyCopyright("")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]		

// 
// Version information for an assembly includes the following four 
// values:
//      Major Version
//      Minor Version 
//      Build Number
//      Revision
// 
// You can specify all the values or you can use the default Revision and 
// Build Numbers by using the '*', similar to this:

[assembly: AssemblyVersion("1.0.*")]

// 
// To sign your assembly, specify a key to use. For more 
// information about assembly signing, see the Microsoft .NET Framework 
// documentation.
// 
// Use the following attributes to control which key is used for signing. 
// 
// NOTES: 
//   (*) If no key is specified, the assembly is not signed.
//   (*) KeyName refers to a key that is installed in the Crypto Service
//       Provider (CSP) on your computer. KeyFile refers to a file that 
//       contains a key.
//   (*) If the KeyFile and the KeyName values are both specified, the 
//       following processing occurs:
//       (1) If the KeyName is found in the CSP, that key is used.
//       (2) If the KeyName does not exist and the KeyFile does exist, the 
//           key in the KeyFile is installed into the CSP and used.
//   (*) To create a KeyFile, you can use the Sn.exe (Strong Name) 
//       tool. When specifying the KeyFile, the location of the KeyFile 
//       must be relative to the project output folder which is
//       %Project Directory%\obj\<configuration>. For example, if your 
//       KeyFile is located in the project folder, specify the 
//       AssemblyKeyFile attribute as 
//          [assembly: AssemblyKeyFile("..\\..\\mykey.snk")]
//   (*) Delay Signing is an advanced option. For more information, see the 
//       Microsoft .NET Framework documentation.
// 
[assembly: AssemblyDelaySign(false)]
[assembly: AssemblyKeyFile("..\\..\\key.snk")]
[assembly: AssemblyKeyName("")]
				

Código para el archivo Form1.cs

using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;

namespace HowToLCE
{
	/// <summary>
	/// Summary description for Form1.
	/// </summary>
	public class Form1 : System.Windows.Forms.Form
	{
		/// <summary>
		/// Required designer variable.
		/// </summary>
		private System.ComponentModel.Container components = null;

		public Form1()
		{
			// 
			// Required for Windows Form Designer support.
			// 
			InitializeComponent();

			// 
			// TODO: Add any constructor code after the
			// InitializeComponent call.
			// 
		}

		/// <summary>
		/// Clean up any resources being used.
		/// </summary>
		protected override void Dispose( bool disposing )
		{
			if( disposing )
			{
				if (components != null) 
				{
					components.Dispose();
				}
			}
			base.Dispose( disposing );
		}

		#region Windows Form Designer generated code
		/// <summary>
		/// Required method for Designer support; do not modify
		/// the contents of this method with the Code Editor.
		/// </summary>
		private void InitializeComponent()
		{
			// 
			// Form1
			// 
			this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
			this.ClientSize = new System.Drawing.Size(292, 266);
			this.Name = "Form1";
			this.Text = "Form1";
			this.Load += new System.EventHandler(this.Form1_Load);

		}
		#endregion

		/// <summary>
		/// The main entry point for the application.
		/// </summary>
		[STAThread]
		static void Main() 
		{
			Application.Run(new Form1());
		}

		private void Form1_Load(object sender, System.EventArgs e)
		{
			//Section #1
			// Register Class Library as a COM+ application.
//			ClassLibLCE.MySubscriber l = new ClassLibLCE.MySubscriber();

			//Section #2
			// Call Events on Publisher.
				ClassLibLCE.MySubscriber l = new ClassLibLCE.MySubscriber();
						l.OnEvent1();
						l.OnEvent2();
		}
	}
}
				

Comprobar que funciona

  1. En la ventana Editor de código, comentario el código en sección # 1 del archivo Form1.cs y quite comentario el código en la sección # 2.
  2. Ejecutar sólo el archivo ejecutable para el proyecto HowToLCE. Para ello, haga clic en Administrador de configuración en el menú Generar . Desactive la casilla de verificación Generar ClassLibLCE . Haga clic en Cerrar .
  3. Presione F5 para ejecutar la aplicación en modo depuración.
  4. Cuando se carga el formulario, ciérrelo.
  5. Presione CTRL + ALT + S para iniciar el Explorador de servidores. Expanda servidores . Expanda computer name. Expanda registros de eventos . Expanda la aplicación . Expanda ClassLibLCE .

    Observe las dos entradas de registro de sucesos.

Solución de problemas

  1. Actualizar el registro de sucesos ver los movimientos en el Explorador de servidores.
  2. Si realiza cambios a la biblioteca de clases después de ejecutar los procedimientos mencionados y volver a generar la biblioteca de clases es muy probable que el ensamblado se bloqueará por servicios de componente. Para evitar este problema, utilice uno de los métodos siguientes:
    • Haga clic con el botón secundario en el componente Servicios de componentes y haga clic en Cerrar .

      -o bien -
    • Eliminar el componente si desea realizar cambios significativos en el código.



Referencias

Para obtener información adicional sobre eventos de correspondencia imprecisa, visite el siguiente sitio Web:
Using Loosely Coupled Events
Para obtener información adicional acerca de cómo implementar y distribuir COM + configuradas clases, visite el siguiente sitio Web:

Propiedades

Id. de artículo: 318185 - Última revisión: lunes, 24 de febrero de 2014 - Versión: 3.3
La información de este artículo se refiere a:
  • Microsoft Visual Studio .NET 2002 Professional
  • Microsoft .NET Framework Class Libraries 1.0
Palabras clave: 
kbnosurvey kbarchive kbmt kbhowtomaster KB318185 KbMtes
Traducción automática
IMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente.
Haga clic aquí para ver el artículo original (en inglés): 318185

Enviar comentarios

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com