Comment faire pour utiliser faiblement couplé événements à partir de Visual Studio .NET

Traductions disponibles Traductions disponibles
Numéro d'article: 318185 - Voir les produits auxquels s'applique cet article
Cet article a été archivé. Il est proposé « en l'état » et ne sera plus mis à jour.
Agrandir tout | Réduire tout

Sommaire

Résumé

Utilisez ce guide étape par étape pour créer un assembly .NET contenant un éditeur, un abonné et une interface de gestion des événements couplées dans les services COM +.

Configuration requise

La liste suivante met en évidence le matériel recommandé, logiciel infrastructure réseau et service packs dont vous avez besoin :
  • Microsoft Windows 2000 Professionnel, Microsoft Windows 2000 Server, Microsoft Windows XP Professionnel ou Microsoft Windows XP Server.
  • Microsoft .NET framework.
  • Microsoft Visual Studio .NET.
  • Microsoft Visual C# .NET.
  • Microsoft COM +.
Cet article suppose que vous êtes familiarisé avec les sujets suivants :
  • COM et Enterprise Services.
  • Extension des métadonnées à l'aide attributs.

Créer un assembly .NET qui événements couplée utilise

La procédure suivante crée un assembly .NET contenant un éditeur, un abonné et une interface que poignées faiblement couplé des événements dans les services COM + :
  1. Cliquez sur Démarrer , pointez sur programmes , pointez sur Visual Studio .NET et puis cliquez sur Visual Studio .NET .
  2. Cliquez sur Nouveau projet .
  3. Dans les types de projets , cliquez sur projets Visual C# .
  4. Dans les modèles , sélectionnez application Windows .
  5. Dans la zone Nom , tapez HowToLCE et puis cliquez sur OK .

    Vous disposez maintenant d'une solution contenant l'interpréteur de commandes d'une application Windows Forms.
  6. Créer une bibliothèque de classes qui contient de code pour l'éditeur, l'abonné et l'interface qui est partagé par deux. Dans le menu Fichier , pointez sur Ajouter projet et puis cliquez sur Nouveau projet .
  7. Dans les types de projets , cliquez sur projets Visual C# .
  8. Dans les modèles , cliquez sur bibliothèque de classes .
  9. Dans la zone Nom , tapez ClassLibLCE et puis cliquez sur OK .
  10. Dans l'Explorateur de solutions, sous ClassLibLCE , cliquez avec le bouton droit sur Références , puis cliquez sur Ajouter une référence .
  11. Sous l'onglet .NET , sous références , cliquez sur System.EnterpriseServices , puis sur Sélectionner . Cliquez sur OK .
  12. Ajoutez les directives Using suivantes en haut du fichier Class1.cs aux classes d'accès dans ces espaces de noms :
    using System.EnterpriseServices;
    using System.Diagnostics;
    						
    lorsque vous compilez le composant de bibliothèque de classes , elle devient un assembly .NET. Une fois que vous inscrire, vous pouvez l'exécuter sous les services COM + parce que l'éditeur et abonné dérivent EnterpriseServices.ServicedComponents() .
  13. Déclarer l'interface que partagent ces deux classes. Dans le fichier Class1.cs, ajoutez le code suivant après classe publique Class1 :
    public interface IEvSink
    {
    	void OnEvent1();
    	void OnEvent2();
    }
    					
  14. Remplacez classe publique Class1 par le code suivant pour la classe de Publisher :
    [EventClass]
    public class MyPublisher : ServicedComponent, IEvSink
    {
    	public MyPublisher()
    	{
    	// 
    	// TODO: Add constructor logic here.
    	// 
    	}
    	public void OnEvent1()
    	{}	
    	public void OnEvent2()
    	{}
    	}
    						
    avertissement la classe précédente est décorée avec l'attribut [EventClass]. Cet attribut est critique. Il indique les services COM + que cette classe constitue la connexion entre l'éditeur et son subscriber(s). Lorsque vous avez déjà utilisé dans tout le code dans cet article, notez qu'il n'existe aucune des appels directs à la classe MyPublisher. En d'autres termes, l'interaction entre publisher et abonné est gérée par les services COM + par la classe avec l'attribut [EventClass]. Par conséquent, l'éditeur n'a pas les connaissance direct de la subscriber(s). Les abonnés enregistré avec les services COM + pour cette application qui utilise l'interface IEvSink pouvez recevoir des événements de l'éditeur.
  15. Le bit final de code requis dans la bibliothèque de classes est pour l'abonné. Cette classe gère les événements déclenchés par l'éditeur. Dans ce cas, vous effectuez une écriture simple dans le journal des événements pour afficher que l'abonné est averti lorsqu'un appel est effectué à l'interface publiée. Ajoutez le code suivant après la classe 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. Pour utiliser l'assembly compilé à partir de la bibliothèque de classes, donnez-lui un nom fort. Pour générer cette paire de clés cryptographique, utilisez l'outil n° de série (Tool Sn.exe). Il se trouve dans le dossier \bin dans lequel les documentation du Kit (SDK) de développeurs .NET Framework Software est installée. L'outil de n° de série est très facile à utiliser. L'instruction de ligne de commande utilise la syntaxe suivante :
    SN-k « C:\%DirectoryToPlaceKey%\%KeyName%.snk »
  17. Exécutez cette commande à partir de l'invite de commande Visual Studio .NET. Cliquez sur Démarrer , pointez sur programmes , pointez sur Visual Studio .NET , pointez sur Outils de Visual Studio .NET et puis cliquez sur invite de commande Visual Studio .NET . À l'invite de commandes, tapez ce qui suit :
    SN-k « C:\ClassLibLCE\key.snk »
    Si votre projet de bibliothèque de classes n'est pas dans ce chemin d'accès, modifiez le chemin à la racine du dossier du projet pour votre projet de bibliothèque de classes.

    Une clé est générée. Pour vérifier cela, dans l'Explorateur de solutions, sélectionnez ClassLibLCE et cliquez sur le bouton Afficher tous les fichiers dans la barre d'outils de l'Explorateur de solutions .

    Notez l'élément key.snk sous ClassLibLCE.
  18. Étant donné que cette clé n'est pas encore associée à l'assembly de bibliothèque de classes, créer cette association. Dans l'Explorateur de solutions, sous ClassLibLCE , double-cliquez sur AssemblyInfo.cs . Dans AssemblyKeyFile , tapez entre guillemets existants :
    "..\\..\\key.snk »
  19. Pour terminer le code de la solution entière câblage jusqu'à un formulaire Windows dans la bibliothèque de classes. N'oubliez pas que ce formulaire est simplement à des fins de démonstration. Il sert essentiellement « harness test ». Ajoutez les références appropriées.
    1. Dans l'Explorateur de solutions, sous HowToLCE , cliquez avec le bouton droit sur Références , puis cliquez sur Ajouter une référence dans le menu contextuel.
    2. Sous l'onglet .NET , cliquez sur System.EnterpriseServices .
    3. Sous l'onglet projets , cliquez sur ClassLibLCE .
    4. Cliquez sur Sélectionner .
    5. Cliquez sur OK .

      Notez les éléments de System.EnterpriseServices et ClassLibLCE répertoriés sous références .
  20. Dans l'éditeur de code, cliquez sur l'onglet Form1.cs [création] double-cliquez n'importe où sur le formulaire pour créer un gestionnaire d'événements Form1_Load . Pour ce gestionnaire d'événements ajoutez le code suivant.

    Notez qu'il existe deux sections. La première est seul le but d'enregistrement de la bibliothèque de classes. Il est utilisé qu'une seule fois. La deuxième déclenche les événements d'éditeur.
    // 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. Appuyez sur F5 pour exécuter l'application et enregistrer la bibliothèque de classes.

    Cela rend l'abonné accessible à, mais pas encore enregistré avec les services COM +. Une fois le formulaire est chargé, fermez-la. Ceci est la méthode plus simple d'enregistrer un assembly .NET, ce qui elle peut tirer parti des services COM +. Cependant, pour enregistrer dans cette manière vous devez être connecté à l'ordinateur local avec des droits d'administration. Si les utilisateurs qui utilisent votre application n'ont pas de droits d'administration sur leur ordinateur local, vous pouvez enregistrer un assembly en utilisant l'utilitaire regasm.exe pour eux lorsque vous déployez l'application.
  22. Exécutez le composant logiciel enfichable Services de composants.

    Vous ne pouvez pas configurer les abonnés à l'aide d'attributs dans .NET version 1.0. Mais, vous pouvez le faire manuellement en exécutant le composant logiciel enfichable Services de composants : ouvrir le Panneau de configuration , double-cliquez sur Outils d'administration et double-cliquez sur Services de composants .

    Remarque : si vous souhaitez, vous pouvez écrire du code pour automatiser la procédure suivante à l'aide la bibliothèque d'administration COM + 1.0. Pour plus d'informations, affichez le contenu de bibliothèque dans l'Explorateur d'objets.
  23. Développez Services de composants . Développez ordinateurs . Développez Poste de travail . Développez des applications COM + . Développez ClassLibLCE . Développez composants . Développez ClassLibLCE.MySubscriber .
  24. Cliquez avec le bouton droit sur le dossier Abonnements , pointez sur Nouveau et puis cliquez sur abonnement .
  25. Dans l'Assistant abonnement nouveau COM +, cliquez sur suivant . Sélectionnez l'option de S'abonner à l'interface IEvSink . Cliquez sur suivant .
  26. Dans la page Sélectionnez classe d'événements , cliquez sur ClassLibLCE.MyPublisher . (Ceci est la classe qui a été décorée avec l'attribut [EventClass].) Cliquez sur suivant .
  27. Saisissez le nom que vous souhaitez utiliser, puis cliquez sur Activez la case à cocher Activer cet abonnement immédiatement . Cliquez sur suivant . Cliquez sur Terminer .

Code pour le fichier 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();
	}
}
				

Code pour le fichier 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("")]
				

Code pour le fichier 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();
		}
	}
}
				

Vérifier Works

  1. Dans la fenêtre Éditeur de code, commentez le code section 1 du fichier Form1.cs et retirez commentaires le code section 2.
  2. Exécuter uniquement le fichier exécutable pour le projet HowToLCE. Pour ce faire, cliquez sur Gestionnaire de configuration dans le menu Générer . Désactivez la case à cocher Créer ClassLibLCE . Cliquez sur Fermer .
  3. Appuyez sur F5 pour exécuter l'application en mode débogage.
  4. Lorsque le formulaire se charge, fermez-la.
  5. Appuyez sur CTRL + ALT + S pour démarrer l'Explorateur de serveurs. Développez serveurs . Développez computer name. Développez journaux des événements . Développez l'application . Développez ClassLibLCE .

    Notez les deux entrées de journal des événements.

Résolution des problèmes

  1. Actualiser le journal des événements pour visualiser les écritures dans l'Explorateur de serveurs.
  2. Si vous apportez des modifications à la bibliothèque de classes après l'exécution via les procédures mentionnées ci-dessus et puis recréez la bibliothèque de classes qu'il est très probable que l'assembly sera verrouillée par les services de composants. Pour contourner ce problème, appliquez une des méthodes suivantes :
    • Cliquez avec le bouton droit sur le composant dans les Services de composants , puis cliquez sur Arrêter .

      -ou-
    • Supprimez le composant si vous souhaitez apporter des modifications significatives à votre code.



Références

Pour plus d'informations sur les événements couplées, reportez-vous au adresse site Web de Microsoft à l'adresse suivante :
Using Loosely Coupled Events
Pour plus d'informations sur la façon implémenter et déployer COM + classes configurés, reportez-vous au adresse site Web de Microsoft à l'adresse suivante :

Propriétés

Numéro d'article: 318185 - Dernière mise à jour: lundi 24 février 2014 - Version: 3.3
Les informations contenues dans cet article s'appliquent au(x) produit(s) suivant(s):
  • Microsoft Visual Studio .NET 2002 Professional Edition
  • Microsoft .NET Framework Class Libraries 1.0
Mots-clés : 
kbnosurvey kbarchive kbmt kbhowtomaster KB318185 KbMtfr
Traduction automatique
IMPORTANT : Cet article est issu du système de traduction automatique mis au point par Microsoft (http://support.microsoft.com/gp/mtdetails). Un certain nombre d?articles obtenus par traduction automatique sont en effet mis à votre disposition en complément des articles traduits en langue française par des traducteurs professionnels. Cela vous permet d?avoir accès, dans votre propre langue, à l?ensemble des articles de la base de connaissances rédigés originellement en langue anglaise. Les articles traduits automatiquement ne sont pas toujours parfaits et peuvent comporter des erreurs de vocabulaire, de syntaxe ou de grammaire (probablement semblables aux erreurs que ferait une personne étrangère s?exprimant dans votre langue !). Néanmoins, mis à part ces imperfections, ces articles devraient suffire à vous orienter et à vous aider à résoudre votre problème. Microsoft s?efforce aussi continuellement de faire évoluer son système de traduction automatique.
La version anglaise de cet article est la suivante: 318185
L'INFORMATION CONTENUE DANS CE DOCUMENT EST FOURNIE PAR MICROSOFT SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE. L'UTILISATEUR ASSUME LE RISQUE DE L'UTILISATION DU CONTENU DE CE DOCUMENT. CE DOCUMENT NE PEUT ETRE REVENDU OU CEDE EN ECHANGE D'UN QUELCONQUE PROFIT.

Envoyer des commentaires

 

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