So wird 's gemacht: Verwendung lose Ereignisse von Visual Studio .NET Verbindung

SPRACHE AUSWÄHLEN SPRACHE AUSWÄHLEN
Artikel-ID: 318185 - Produkte anzeigen, auf die sich dieser Artikel bezieht
Dieser Artikel wurde archiviert. Er wird im vorliegenden Zustand bereitgestellt und nicht mehr aktualisiert.
Alles erweitern | Alles schließen

Auf dieser Seite

Zusammenfassung

Verwenden Sie diese Schritt-für-Schritt-Anleitung, um eine .NET-Assembly mit einem Herausgeber, einen Abonnenten und eine Schnittstelle für lose gekoppelte Ereignisbehandlung in Microsoft COM+-Dienste zu erstellen.

Voraussetzungen

Die folgende Liste führt die empfohlene Hardware, Software, Netzwerkinfrastruktur und Servicepacks, die Sie benötigen:
  • Microsoft Windows 2000 Professional, Microsoft Windows 2000 Server, Microsoft Windows XP Professional oder Microsoft Windows XP Server.
  • Microsoft .NET Framework.
  • Microsoft Visual Studio .NET.
  • Microsoft Visual c# .NET.
  • Microsoft COM+.
In diesem Artikel wird vorausgesetzt, dass Sie über Erfahrungen auf den folgenden Gebieten verfügen:
  • COM und Enterprise Services.
  • Erweitern von Metadaten mithilfe von Attributen.

Erstellen einer .NET-Assembly, lose gekoppelte Ereignisse verwendet

Die folgende Prozedur erstellt eine mit einem Herausgeber, einen Abonnenten und eine Schnittstelle, Handles Ereignisse in COM+-Diensten lose:
  1. Klicken Sie auf Start , zeigen Sie auf Programme , zeigen Sie auf Microsoft Visual Studio .NET, und klicken Sie dann auf Microsoft Visual Studio .NET .
  2. Klicken Sie auf Neues Projekt .
  3. Klicken Sie im Projekttypen auf Visual C#-Projekte .
  4. Wählen Sie im Vorlagen die Option Windows-Anwendung .
  5. Geben Sie in das Feld Name HowToLCE und klicken Sie dann auf OK .

    Sie haben jetzt eine Lösung mit die Shell des Windows Forms-Anwendung.
  6. Erstellen Sie eine Klassenbibliothek, die Code enthält, für den Herausgeber, der Abonnent und der Schnittstelle, die von beiden gemeinsam genutzt wird. Zeigen Sie im Menü Datei auf Projekt hinzufügen und klicken Sie auf Neues Projekt .
  7. Klicken Sie im Projekttypen auf Visual C#-Projekte .
  8. Klicken Sie in Vorlagen auf die Klassenbibliothek .
  9. Geben Sie in das Feld Name ClassLibLCE und klicken Sie dann auf OK .
  10. Klicken Sie in Projektmappen-Explorer unter ClassLibLCE mit der rechten Maustaste auf Verweise und klicken Sie dann auf Verweis hinzufügen .
  11. Klicken Sie auf der Registerkarte .NET unter References auf ' System.EnterpriseServices ' und dann auf auswählen . Klicken Sie auf OK .
  12. Fügen Sie die folgenden Using -Direktiven am Anfang der Datei Class1.cs auf Klassen in diesen Namespaces:
    using System.EnterpriseServices;
    using System.Diagnostics;
    						
    beim Kompilieren der Klassenbibliothek -Komponente wird eine .NET-Assembly. Nachdem Sie es registriert haben, können Sie ihn unter COM+-Dienste ausführen, da der Verleger und Abonnent von EnterpriseServices.ServicedComponents() abgeleitet.
  13. Deklarieren Sie diese beiden Klassen gemeinsam nutzen, werden die Schnittstelle. Fügen Sie in der Datei Class1.cs den folgenden Code nach public Class Class1 :
    public interface IEvSink
    {
    	void OnEvent1();
    	void OnEvent2();
    }
    					
  14. Ersetzen Sie öffentliche Klasse Class1 durch folgenden Code für die Publisher-Klasse:
    [EventClass]
    public class MyPublisher : ServicedComponent, IEvSink
    {
    	public MyPublisher()
    	{
    	// 
    	// TODO: Add constructor logic here.
    	// 
    	}
    	public void OnEvent1()
    	{}	
    	public void OnEvent2()
    	{}
    	}
    						
    Beachten Sie die vorhergehende Klasse mit dem [EventClass]-Attribut ergänzt ist. Dieses Attribut ist kritisch. Es teilt COM+-Dienste, dass diese Klasse die Verbindung zwischen dem Verleger und der Subscriber(s) bildet. Wenn Sie über den Code in diesem Artikel gearbeitet haben, Beachten Sie, dass es keine direkte Aufrufe an die MyPublisher-Klasse. Mit anderen Worten, wird die Interaktion zwischen Verleger und Abonnent von COM+-Dienste durch die Klasse mit dem Attribut [EventClass] behandelt. Daher muss der Herausgeber keine direkte Kenntnisse der Subscriber(s) nicht. Alle mit COM+-Dienste für diese Anwendung, die die IEvSink-Schnittstelle verwendet registrierten Abonnenten kann Ereignisse vom Verleger empfangen.
  15. Das letzte Bit in der Klassenbibliothek erforderlichen Code ist für den Abonnenten. Diese Klasse behandelt das vom Herausgeber ausgelöste Ereignisse. Stellen Sie in diesem Fall einen einfachen Eintrag im Ereignisprotokoll anzeigen, dass der Abonnent benachrichtigt wird, erfolgt ein Aufruf an die veröffentlichten Schnittstelle. Fügen Sie folgenden Code nach der MyPublisher -Klasse:
    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. Die Assembly aus der Klassenbibliothek kompiliert verwenden, geben Sie ihm einen starken Namen. Um dieses kryptografische Schlüsselpaar zu generieren, verwenden Sie das SN-Tool (Sn.exe). Sie befindet im \bin-Ordner, die, in der Dokumentation des .NET Framework Software Developer's Kit (SDK) installiert ist. Das SN-Tool ist sehr einfach zu verwenden. Die Befehlszeile-Anweisung verwendet die folgende Syntax:
    sn-k "C:\%DirectoryToPlaceKey%\%KeyName%.snk"
  17. Führen Sie diesen Befehl an der Eingabeaufforderung der Visual Studio .NET. Klicken Sie auf Start , zeigen Sie auf Programme , zeigen Sie auf Microsoft Visual Studio .NET , zeigen Sie auf Visual Studio .NET Tools und klicken Sie dann auf Visual Studio .NET-Eingabeaufforderung . Geben Sie an der Eingabeaufforderung Folgendes ein:
    sn-k "C:\ClassLibLCE\key.snk"
    Wenn Ihr Klassenbibliotheksprojekt nicht in diesem Pfad ist, ändern Sie den Pfad zum Stamm des Ordners Projekt für Ihr Klassenbibliotheksprojekt.

    Ein Schlüssel generiert wird. Um diese im Projektmappen-Explorer überprüfen, wählen Sie ClassLibLCE , und klicken Sie dann auf der Symbolleiste des Projektmappen-Explorers Alle Dateien anzeigen .

    Beachten Sie das Element key.snk unter ClassLibLCE.
  18. Da dieser Schlüssel noch nicht der Class Library-Assembly zugeordnet ist, erstellen Sie diese Zuordnung. Doppelklicken Sie im Projektmappen-Explorer unter ClassLibLCE auf AssemblyInfo.cs . Geben Sie im AssemblyKeyFile Folgendes zwischen den vorhandenen Anführungszeichen:
    "..\\..\\key.snk"
  19. Führen Sie den Code für die gesamte Lösung, indem Sie Kabel, ein Windows Form-Klassenbibliothek. Beachten Sie, dass dieses Formular lediglich zu Demonstrationszwecken. Es fungiert im Grunde als "Testumgebung". Fügen Sie die entsprechenden Verweise hinzu.
    1. Mit der im Projektmappen-Explorer unter HowToLCE Maustaste auf Verweise und klicken Sie dann im Kontextmenü auf Verweis hinzufügen .
    2. Klicken Sie auf der Registerkarte .NET auf System.EnterpriseServices .
    3. Klicken Sie auf der Registerkarte Projekte auf ClassLibLCE .
    4. Klicken Sie auf auswählen .
    5. Klicken Sie auf OK .

      Beachten Sie die System.EnterpriseServices und ClassLibLCE Einträgen unter Verweise .
  20. Klicken Sie im Code-Editor auf die Registerkarte Form1.cs [Entwurf] , und doppelklicken Sie auf eine beliebige Stelle auf dem Formular einen Form1_Load -Ereignishandler erstellen. Fügen Sie diesem Ereignishandler den folgenden Code.

    Beachten Sie, dass zwei Abschnitte sind. Der erste ist ausschließlich zum Zweck der Registrieren der Klassenbibliothek. Es wird nur einmal verwendet. Die zweite löst die Ereignisse 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. Drücken Sie F5, um die Anwendung ausführen und registrieren die Class-Bibliothek.

    Auf diese Weise den Abonnenten zugänglich, aber mit COM+-Dienste noch nicht registriert. Nachdem das Formular geladen wird, schließen Sie es. Dies ist die einfachste Methode der .NET-Assembly registrieren, so dass Sie COM+-Dienste nutzen kann. Allerdings müssen in dieser Weise registrieren Sie auf dem lokalen Computer mit Administratorrechten angemeldet sein. Wenn Benutzer Ihre Anwendung nicht über Administratorrechte auf Ihren lokalen Computer verfügen, können Sie eine Assembly registrieren, mit das Regasm.exe-Dienstprogramm für Sie, wenn Sie die Anwendung bereitstellen.
  22. Führen Sie die Komponentendienste-Snap-in.

    Sie können nicht Abonnenten mithilfe von Attributen in .NET 1.0 eingerichtet. Allerdings können Sie dies manuell durch die Komponentendienste-Snap-in ausgeführt: Öffnen Der Systemsteuerung , doppelklicken Sie auf Verwaltung , und doppelklicken Sie dann auf Komponentendienste .

    Hinweis : Wenn Sie möchten, können Sie Code die folgenden Schritte automatisieren, indem die COM+ 1.0 Admin Bibliothek schreiben. Weitere Informationen finden Sie den Inhalt der Bibliothek im Objektkatalog.
  23. Erweitern Sie Komponentendienste . Erweitern Sie Computer . Erweitern Sie Arbeitsplatz . Erweitern Sie COM+-Anwendungen . Erweitern Sie ClassLibLCE . Erweitern Sie Komponenten . Erweitern Sie ClassLibLCE.MySubscriber .
  24. Klicken Sie mit der rechten Maustaste auf den Ordner Publikationen , zeigen Sie auf neu und klicken Sie dann auf Abonnements .
  25. Klicken Sie im COM+-neues Abonnement Assistenten auf Weiter . Wählen Sie Option Abonnieren der IEvSink-Schnittstelle . Klicken Sie auf Weiter .
  26. Klicken Sie auf der Seite Ereignisklasse auswählen auf ClassLibLCE.MyPublisher . (Dies ist die Klasse, die mit dem [EventClass]-Attribut ergänzt wurde.) Klicken Sie auf Weiter .
  27. Geben Sie den Namen zu verwenden, und aktivieren Sie dann das Kontrollkästchen dieses Abonnement sofort aktivieren . Klicken Sie auf Weiter . Klicken Sie auf Fertig stellen .

Code für die Datei 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 für die Datei 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 für die Datei 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();
		}
	}
}
				

Überprüfen Sie Works

  1. Im Fenster Code-Editor den Code in Abschnitt 1 der Datei Form1.cs Kommentar, und kommentieren Sie den Code im Abschnitt # 2.
  2. Führen Sie nur die ausführbare Datei für das Projekt HowToLCE aus. Klicken Sie dazu im Menü Erstellen auf Configuration Manager . Deaktivieren Sie das Kontrollkästchen Erstellen für ClassLibLCE . Klicken Sie auf Schließen .
  3. Drücken Sie F5, um die Anwendung im Debugmodus auszuführen.
  4. Wenn das Formular geladen wird, schließen Sie es.
  5. Drücken Sie STRG + ALT + S, Server-Explorer zu starten. Erweitern Sie Server . Erweitern Sie computer name. Erweitern Sie die Ereignisprotokolle . Erweitern Sie die Anwendung . Erweitern Sie ClassLibLCE .

    Beachten Sie die beiden Ereignisprotokoll Einträge.

Problembehandlung

  1. Aktualisieren Sie das Ereignisprotokoll, um die Einträge im Server-Explorer anzuzeigen.
  2. Wenn Sie an der Klassenbibliothek Änderungen nach dem durch die oben genannten Prozeduren ausführen und anschließend erneutes der Klassenbibliothek erstellen ist es sehr wahrscheinlich, dass die Assembly von Komponentendienste gesperrt werden. Verwenden Sie eines der folgenden Methoden an, um dieses Problem umgehen:
    • Klicken Sie mit der rechten Maustaste auf die Komponente in den Komponentendiensten und klicken Sie Beenden .

      -oder-
    • Löschen Sie die Komponente, wenn Sie wesentliche Änderungen an Code vornehmen möchten.



Informationsquellen

Weitere Informationen über lose gekoppelte Ereignisse die folgende Microsoft-Website:
Using Loosely Coupled Events
Weitere Informationen zum Implementieren und Bereitstellen von com+ Website konfigurierte Klassen, die folgende Microsoft:

Eigenschaften

Artikel-ID: 318185 - Geändert am: Montag, 24. Februar 2014 - Version: 3.3
Die Informationen in diesem Artikel beziehen sich auf:
  • Microsoft Visual Studio .NET 2002 Professional Edition
  • Microsoft .NET Framework-Klassenbibliotheken 1.0
Keywords: 
kbnosurvey kbarchive kbmt kbhowtomaster KB318185 KbMtde
Maschinell übersetzter Artikel
Wichtig: Dieser Artikel wurde maschinell und nicht von einem Menschen übersetzt. Die Microsoft Knowledge Base ist sehr umfangreich und ihre Inhalte werden ständig ergänzt beziehungsweise überarbeitet. Um Ihnen dennoch alle Inhalte auf Deutsch anbieten zu können, werden viele Artikel nicht von Menschen, sondern von Übersetzungsprogrammen übersetzt, die kontinuierlich optimiert werden. Doch noch sind maschinell übersetzte Texte in der Regel nicht perfekt, insbesondere hinsichtlich Grammatik und des Einsatzes von Fremdwörtern sowie Fachbegriffen. Microsoft übernimmt keine Gewähr für die sprachliche Qualität oder die technische Richtigkeit der Übersetzungen und ist nicht für Probleme haftbar, die direkt oder indirekt durch Übersetzungsfehler oder die Verwendung der übersetzten Inhalte durch Kunden entstehen könnten.
Den englischen Originalartikel können Sie über folgenden Link abrufen: 318185
Microsoft stellt Ihnen die in der Knowledge Base angebotenen Artikel und Informationen als Service-Leistung zur Verfügung. Microsoft übernimmt keinerlei Gewährleistung dafür, dass die angebotenen Artikel und Informationen auch in Ihrer Einsatzumgebung die erwünschten Ergebnisse erzielen. Die Entscheidung darüber, ob und in welcher Form Sie die angebotenen Artikel und Informationen nutzen, liegt daher allein bei Ihnen. Mit Ausnahme der gesetzlichen Haftung für Vorsatz ist jede Haftung von Microsoft im Zusammenhang mit Ihrer Nutzung dieser Artikel oder Informationen ausgeschlossen.

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