HOW TO: Use debolmente collegati eventi da Visual Studio .NET

Traduzione articoli Traduzione articoli
Identificativo articolo: 318185 - Visualizza i prodotti a cui si riferisce l?articolo.
Questo articolo Ŕ stato archiviato. L?articolo, quindi, viene offerto ?cosý come Ŕ? e non verrÓ pi¨ aggiornato.
Espandi tutto | Chiudi tutto

In questa pagina

Sommario

Utilizzare questa Guida dettagliata per creare un assembly .NET contenente un server di pubblicazione, un server di sottoscrizione e un'interfaccia per la gestione degli eventi con accoppiamento ridotto in servizi Microsoft COM +.

Requisiti

Nell'elenco seguente sono indicati hardware, software, infrastruttura di rete e i service pack Ŕ necessario:
  • Microsoft Windows 2000 Professional, Microsoft Windows 2000 Server, Microsoft Windows XP Professional o server di Microsoft Windows XP.
  • Microsoft .NET framework.
  • Microsoft Visual Studio. NET.
  • Microsoft Visual C#. NET.
  • Microsoft COM +.
In questo articolo si presume la conoscenza dei seguenti argomenti:
  • COM e servizi Enterprise.
  • Estensione di metadati mediante attributi.

Creare un assembly .NET che eventi con accoppiamento ridotto utilizzo

La procedura seguente consente di creare un assembly .NET contenente un server di pubblicazione, un server di sottoscrizione e un'interfaccia che gestisce ad accoppiamento eventi in servizi COM +:
  1. Fare clic su Start , scegliere programmi , scegliere Microsoft Visual Studio .NET e quindi fare clic su Microsoft Visual Studio. NET .
  2. Scegliere Nuovo progetto .
  3. In Tipi progetto scegliere Progetti di Visual C# .
  4. In modelli selezionare Applicazione Windows .
  5. Nella casella nome digitare HowToLCE e quindi fare clic su OK .

    Ora Ŕ una soluzione contenente la shell di un'applicazione Windows Form.
  6. Creazione di una libreria di classi che contiene il codice per il server di pubblicazione, il server di sottoscrizione e l'interfaccia che viene condiviso da entrambi. Scegliere Aggiungi progetto dal menu file , quindi Nuovo progetto .
  7. In Tipi progetto scegliere Progetti di Visual C# .
  8. Nella finestra di modelli , fare clic su Libreria di classi .
  9. Nella casella nome digitare ClassLibLCE e quindi fare clic su OK .
  10. In Esplora soluzioni in ClassLibLCE , fare clic con il pulsante destro del mouse su riferimenti e quindi fare clic su Aggiungi riferimento .
  11. Nella scheda .NET , nella casella riferimenti , fare clic su System.EnterpriseServices e quindi fare clic su Seleziona . Fare clic su OK .
  12. Aggiungere le seguenti istruzioni Using all'inizio del file Class1.cs alle classi di accesso in questi spazi dei nomi:
    using System.EnterpriseServices;
    using System.Diagnostics;
    						
    quando si compila il componente della Libreria di classi , diventa un assembly. NET. Dopo la registrazione, Ŕ possibile eseguirla in servizi COM + poichÚ l'editore e sottoscrittore derivano da EnterpriseServices.ServicedComponents() .
  13. Dichiarare l'interfaccia che saranno condivise da queste due classi. Nel file Class1.cs aggiungere il seguente codice dopo public class Class1 :
    public interface IEvSink
    {
    	void OnEvent1();
    	void OnEvent2();
    }
    					
  14. Sostituire public class Class1 con il codice riportato di seguito per la classe di Publisher:
    [EventClass]
    public class MyPublisher : ServicedComponent, IEvSink
    {
    	public MyPublisher()
    	{
    	// 
    	// TODO: Add constructor logic here.
    	// 
    	}
    	public void OnEvent1()
    	{}	
    	public void OnEvent2()
    	{}
    	}
    						
    si noti la precedente classe Ŕ decorata con l'attributo di [EventClass]. Questo attributo Ŕ fondamentale. Indica i servizi COM + che questa classe costituisce la connessione tra il server di pubblicazione e il relativo subscriber(s). Quando si sono eseguite tutto il codice in questo articolo, notare che non vi sono meno chiamate dirette alla classe MyPublisher. In altre parole, l'interazione tra server di pubblicazione e server di sottoscrizione Ŕ gestita dai servizi COM + dalla classe con l'attributo [EventClass]. Di conseguenza, il server di pubblicazione non Ŕ diretta conoscenza del subscriber(s). Qualsiasi server di sottoscrizione registrato con i servizi COM + per l'applicazione che utilizza l'interfaccia IEvSink pu˛ ricevere eventi dal server di pubblicazione.
  15. Il bit finale del codice necessario nella libreria di classi Ŕ per il server di sottoscrizione. Questa classe gestisce gli eventi generati dal server di pubblicazione. In questo caso, apportate una semplice voce nel registro eventi per indicare che il server di sottoscrizione Ŕ una notifica quando viene effettuata una chiamata all'interfaccia pubblicata. Aggiungere il codice seguente dopo 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. Per utilizzare l'assembly compilato dalla libreria di classi, Ŕ necessario che un nome sicuro. Per generare questo coppia di chiavi crittografiche, utilizzare lo strumento di NS (Sn.exe). Si trova nella cartella \bin in cui Ŕ installato la documentazione del Kit (SDK) di sviluppatori di .NET Framework Software. Lo strumento SN Ŕ molto facile da utilizzare. L'istruzione di riga di comando utilizza la seguente sintassi:
    sn -k "C:\%DirectoryToPlaceKey%\%KeyName%.snk"
  17. Eseguire questo comando dal prompt dei comandi di Visual Studio. NET. Fare clic su Start , scegliere programmi , scegliere Microsoft Visual Studio. NET , Visual Studio .NET Tools , quindi prompt dei comandi di Visual Studio. NET . Al prompt dei comandi, digitare quanto segue:
    sn -k "C:\ClassLibLCE\key.snk"
    Se il progetto libreria di classi non Ŕ in questo percorso, modificare il percorso alla directory principale cartella del progetto per il progetto libreria di classi.

    Viene generata una chiave. Per verificare, in Esplora soluzioni, Ŕ necessario selezionare ClassLibLCE e quindi fare clic sul pulsante Mostra tutti i file sulla barra degli strumenti Esplora soluzioni .

    Si noti la voce di key.snk in ClassLibLCE.
  18. PoichÚ questa chiave non Ŕ ancora associata con l'assembly di libreria di classi, Ŕ necessario creare questa associazione. In Esplora soluzioni in ClassLibLCE , fare doppio clic su AssemblyInfo.cs . In AssemblyKeyFile , digitare quanto segue tra le virgolette esistenti:
    "..\\..\\key.snk"
  19. Collegamento di un Windows Form per la libreria di classi per completare il codice per l'intera soluzione. Tenere presente che questo modulo Ŕ semplicemente a scopo dimostrativo. Funge essenzialmente da un "test harness". Aggiungere i riferimenti appropriati.
    1. In Esplora soluzioni, in HowToLCE , fare clic con il pulsante destro del mouse su riferimenti e quindi scegliere Aggiungi riferimento dal menu di scelta rapida.
    2. Nella scheda .NET , fare clic su System.EnterpriseServices .
    3. Nella scheda progetti , fare clic su ClassLibLCE .
    4. Fare clic su Seleziona .
    5. Fare clic su OK .

      Si noti System.EnterpriseServices e ClassLibLCE elementi elencati nella casella riferimenti .
  20. In Editor di codice scegliere la scheda Form1.cs [Progettazione] fare doppio clic in un punto qualsiasi sul form per creare un gestore di eventi Form1_Load . Per questo gestore eventi aggiungere il codice riportato di seguito.

    Si noti che sono presenti due sezioni. Il primo Ŕ esclusivamente a scopo di registrare la libreria di classi. Viene utilizzato solo una volta. Il secondo attiva gli eventi del server di pubblicazione.
    // 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. Premere F5 per eseguire l'applicazione e registrare la libreria di classi.

    In questo modo il server di sottoscrizione accessibile, ma non ancora registrato con i servizi COM +. Dopo avere caricato il form, chiuderlo. Questo Ŕ il metodo pi¨ semplice di registrazione di un assembly .NET in modo che Ŕ possibile sfruttare servizi COM +. Per registrare in questo modo Ŕ tuttavia necessario accedervi al computer locale con diritti amministrativi. Se gli utenti utilizzano l'applicazione non dispongono di diritti amministrativi sul computer locale, Ŕ possibile registrare un assembly utilizzando l'utilitÓ di Regasm.exe per tali quando si distribuisce l'applicazione.
  22. Consente di eseguire lo snap-in Servizi componenti.

    Non Ŕ possibile impostare i server di sottoscrizione utilizzando gli attributi in .NET versione 1.0. Ma, Ŕ possibile eseguita manualmente in esecuzione lo snap-in Servizi componenti: Apri Pannello di controllo , fare doppio clic su Strumenti di amministrazione e quindi su Servizi componenti .

    Nota : se si desidera, Ŕ possibile scrivere codice per automatizzare i seguenti passaggi utilizzando la libreria di 1.0 Admin COM +. Per ulteriori informazioni, visualizzare il contenuto di libreria nel Visualizzatore oggetti.
  23. Espandere Servizi componenti . Espandere il computer . Espandere risorse del computer . Espandere applicazioni COM + . Espandere ClassLibLCE . Espandere componenti . Espandere ClassLibLCE.MySubscriber .
  24. Fare clic con il pulsante destro del mouse sulla cartella sottoscrizioni , scegliere Nuovo e quindi scegliere sottoscrizione .
  25. In COM + guidata di sottoscrizione nuova, fare clic su Avanti . Selezionare l'opzione Subscribe all'interfaccia IEvSink . Fare clic su Avanti .
  26. Nella pagina Seleziona classe di evento , fare clic su ClassLibLCE.MyPublisher . (Questa Ŕ la classe che Ŕ stata decorata con l'attributo [EventClass]). Fare clic su Avanti .
  27. Immettere il nome che si desidera utilizzare e quindi fare clic per selezionare la casella di controllo attiva immediatamente la sottoscrizione . Fare clic su Avanti . Fare clic su Fine .

Codice per il File 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();
	}
}
				

Codice per il File 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("")]
				

Codice per il File 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();
		}
	}
}
				

Verificare che funzioni

  1. Nella finestra dell'editor di codice commento il codice nella sezione # 1 del file Form1.cs, e rimuovere il commento il codice nella sezione # 2.
  2. Eseguire solo il file eseguibile per il progetto HowToLCE. Per effettuare questa operazione, scegliere Gestione configurazione dal menu Genera . Deselezionare la casella di controllo Genera per ClassLibLCE . Fare clic su Chiudi .
  3. Premere F5 per eseguire l'applicazione in modalitÓ di debug.
  4. Quando il form viene caricato, chiuderlo.
  5. Premere CTRL + ALT + S per avviare Esplora Server. Espandere server . Espandere computer name. Espandere il log eventi . Espandere l'applicazione . Espandere ClassLibLCE .

    Notare le due voci del registro eventi.

Risoluzione dei problemi

  1. Aggiornare il registro eventi per visualizzare i movimenti in Esplora Server.
  2. Se si apportano modifiche alla libreria di classi dopo l'esecuzione delle procedure citati in precedenza e si quindi Rigenera la libreria di classi Ŕ molto probabile che l'assembly verrÓ bloccato da Servizi componenti. Per risolvere questo problema, utilizzare uno dei seguenti metodi:
    • Il componente in Servizi componenti fare clic con il pulsante destro del mouse e scegliere Arresta .

      - oppure -
    • Eliminare il componente se si desidera apportare modifiche significative al codice.



Riferimenti

Per ulteriori informazioni sugli eventi con accoppiamento ridotto, visitare il sito di Web di Microsoft:
Using Loosely Coupled Events
Per ulteriori informazioni su come implementare e distribuire COM + classi configurate, il seguente sito Microsoft Web:

ProprietÓ

Identificativo articolo: 318185 - Ultima modifica: lunedý 24 febbraio 2014 - Revisione: 3.3
Le informazioni in questo articolo si applicano a:
  • Microsoft Visual Studio .NET 2002 Professional Edition
  • Microsoft .NET Framework Class Libraries 1.0
Chiavi:á
kbnosurvey kbarchive kbmt kbhowtomaster KB318185 KbMtit
Traduzione automatica articoli
Il presente articolo Ŕ stato tradotto tramite il software di traduzione automatica di Microsoft e non da una persona. Microsoft offre sia articoli tradotti da persone fisiche sia articoli tradotti automaticamente da un software, in modo da rendere disponibili tutti gli articoli presenti nella nostra Knowledge Base nella lingua madre dell?utente. Tuttavia, un articolo tradotto in modo automatico non Ŕ sempre perfetto. Potrebbe contenere errori di sintassi, di grammatica o di utilizzo dei vocaboli, pi¨ o meno allo stesso modo di come una persona straniera potrebbe commettere degli errori parlando una lingua che non Ŕ la sua. Microsoft non Ŕ responsabile di alcuna imprecisione, errore o danno cagionato da qualsiasi traduzione non corretta dei contenuti o dell?utilizzo degli stessi fatto dai propri clienti. Microsoft, inoltre, aggiorna frequentemente il software di traduzione automatica.
Clicca qui per visualizzare la versione originale in inglese dell?articolo: 318185
LE INFORMAZIONI CONTENUTE NELLA MICROSOFT KNOWLEDGE BASE SONO FORNITE SENZA GARANZIA DI ALCUN TIPO, IMPLICITA OD ESPLICITA, COMPRESA QUELLA RIGUARDO ALLA COMMERCIALIZZAZIONE E/O COMPATIBILITA' IN IMPIEGHI PARTICOLARI. L'UTENTE SI ASSUME L'INTERA RESPONSABILITA' PER L'UTILIZZO DI QUESTE INFORMAZIONI. IN NESSUN CASO MICROSOFT CORPORATION E I SUOI FORNITORI SI RENDONO RESPONSABILI PER DANNI DIRETTI, INDIRETTI O ACCIDENTALI CHE POSSANO PROVOCARE PERDITA DI DENARO O DI DATI, ANCHE SE MICROSOFT O I SUOI FORNITORI FOSSERO STATI AVVISATI. IL DOCUMENTO PUO' ESSERE COPIATO E DISTRIBUITO ALLE SEGUENTI CONDIZIONI: 1) IL TESTO DEVE ESSERE COPIATO INTEGRALMENTE E TUTTE LE PAGINE DEVONO ESSERE INCLUSE. 2) I PROGRAMMI SE PRESENTI, DEVONO ESSERE COPIATI SENZA MODIFICHE, 3) IL DOCUMENTO DEVE ESSERE DISTRIBUITO INTERAMENTE IN OGNI SUA PARTE. 4) IL DOCUMENTO NON PUO' ESSERE DISTRIBUITO A SCOPO DI LUCRO.

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