COMO: Utilizar livremente acopladas eventos do Visual Studio .NET

Traduções de Artigos Traduções de Artigos
Artigo: 318185 - Ver produtos para os quais este artigo se aplica.
Este artigo foi arquivado. Este artigo é oferecido "tal como está" e deixará de ser actualizado.
Expandir tudo | Reduzir tudo

Nesta página

Sumário

Utilize este guia passo-a-passo para criar uma assemblagem .NET com um editor, um subscritor e uma interface para o processamento livremente acopladas eventos de serviços COM +.

Requisitos

A lista seguinte descreve o hardware recomendado, software, infra-estrutura de rede e service packs que necessita:
  • Microsoft Windows 2000 Professional, Microsoft Windows 2000 Server, Microsoft Windows XP Professional ou Microsoft Windows XP Server.
  • Microsoft .NET framework.
  • Microsoft Visual Studio .NET
  • Microsoft Visual C# .NET.
  • Microsoft COM +.
Este artigo pressupõe que está familiarizado com os seguintes tópicos:
  • COM e serviços de empresa.
  • Expandir metadados utilizando atributos.

Criar uma assemblagem .NET que eventos livremente livre utiliza

O seguinte procedimento cria uma assemblagem .NET com um editor, um subscritor e uma interface que alças livremente acopladas eventos de serviços COM +:
  1. Clique em Iniciar , aponte para programas , aponte para Microsoft Visual Studio .NET e, em seguida, clique em Microsoft Visual Studio. NET .
  2. Clique em novo projecto .
  3. Em Project Types , clique em Visual C# Projects .
  4. Nos modelos , seleccione a Aplicação do Windows .
  5. Na caixa nome , escreva HowToLCE e, em seguida, clique em OK .

    Tem agora uma solução que contém a shell de uma aplicação Windows Forms.
  6. Crie uma biblioteca de classes que contém o código para o fabricante, o subscritor e a interface que é partilhada por ambos. No menu ficheiro , aponte para Adicionar o projecto e, em seguida, clique em Novo projecto .
  7. Em Project Types , clique em Visual C# Projects .
  8. Na modelos , clique em Biblioteca de classes .
  9. Na caixa nome , escreva ClassLibLCE e, em seguida, clique em OK .
  10. No Solution Explorer, em ClassLibLCE , clique com o botão direito do rato em References e, em seguida, clique em Add Reference .
  11. No separador .NET , em referências , clique em System.EnterpriseServices e, em seguida, clique em Seleccionar . Clique em OK .
  12. Adicionar as directivas de utilizar seguintes na parte superior do ficheiro Class1.cs para classes de acesso estes espaços de nomes:
    using System.EnterpriseServices;
    using System.Diagnostics;
    						
    quando compilar o componente de Biblioteca de classes , torna-se uma assemblagem .NET. Depois de registar, pode executá-la em serviços COM + porque o Editor e subscritor deriva EnterpriseServices.ServicedComponents() .
  13. Declare interface que vão partilhar estas duas classes. No ficheiro Class1.cs, adicione o seguinte código depois de classe pública Aula1 :
    public interface IEvSink
    {
    	void OnEvent1();
    	void OnEvent2();
    }
    					
  14. Substituir a classe pública Aula1 o seguinte código para a classe do Publisher:
    [EventClass]
    public class MyPublisher : ServicedComponent, IEvSink
    {
    	public MyPublisher()
    	{
    	// 
    	// TODO: Add constructor logic here.
    	// 
    	}
    	public void OnEvent1()
    	{}	
    	public void OnEvent2()
    	{}
    	}
    						
    Viso a classe anterior está decorada com o atributo [EventClass]. Este atributo é crítico. Indica serviços COM + que esta classe formulários a ligação entre o publisher e respectivo subscriber(s). Quando trabalhou através de todos os código neste artigo, repare que existem sem chamadas para a classe MyPublisher directas. Por outras palavras, a interacção entre o publisher e o assinante é tratada pelo serviços COM + pela classe com o atributo [EventClass]. Por este motivo, o publisher não é necessário possuir conhecimentos do subscriber(s) directo. Qualquer subscritor registado nos serviços COM + para esta aplicação utiliza a interface IEvSink pode receber eventos do fabricante.
  15. O bit final do código necessário na biblioteca de classes é para o subscritor. Esta classe processa os eventos accionados pelo fabricante. Neste caso, certifique-se uma entrada simples no registo de eventos para mostrar que o subscritor é notificado quando é efectuada uma chamada à interface publicado. Adicione o seguinte código depois da 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. Para utilizar a assemblagem compilada da biblioteca de classes, dar-um nome seguro. Para gerar este par de chaves criptográfica, utilize a ferramenta de NS (Sn.exe). Está localizado na pasta \bin onde a documentação do .NET Framework Software Developers Kit (SDK) está instalada. A ferramenta de NS é muito fácil de utilizar. A instrução de linha de comandos utiliza a seguinte sintaxe:
    sn -k "C:\%DirectoryToPlaceKey%\%KeyName%.snk"
  17. Execute este comando a partir de comandos do Visual Studio. NET. Clique em Iniciar , aponte para programas , aponte para Microsoft Visual Studio. NET , aponte para Ferramentas do Visual Studio .NET e, em seguida, clique em Visual Studio .NET Command Prompt . Na linha de comandos, escreva o seguinte:
    sn -k "C:\ClassLibLCE\key.snk"
    Se o projecto da biblioteca de classes não estiver neste caminho, altere o caminho para a raiz da pasta do projecto para o projecto da biblioteca de classes.

    É gerada uma chave. Para verificar isto, no Solution Explorer, seleccione ClassLibLCE e, em seguida, clique no botão Mostrar todos os ficheiros na barra de ferramentas Solution Explorer .

    Repare o item key.snk ClassLibLCE.
  18. Uma vez que esta chave ainda não estiver associada a assemblagem de biblioteca de classes, crie esta associação. No Solution Explorer, ClassLibLCE , faça duplo clique em AssemblyInfo.cs . Na AssemblyKeyFile , escreva o seguinte entre as aspas existentes:
    "..\\..\\key.snk"
  19. Preencha o código para a solução completa por cabos de um formulário de Windows para a biblioteca de classes. Tenha em atenção que este formulário é apenas para fins de demonstração. Basicamente, funciona como um "conjunto de teste". Adicione referências adequadas.
    1. No Solution Explorer, HowToLCE , clique com o botão direito do rato em References e, em seguida, clique em Add Reference no menu de atalho.
    2. No separador .NET , clique em System.EnterpriseServices .
    3. No separador projectos , clique em ClassLibLCE .
    4. Clique em Seleccionar .
    5. Clique em OK .

      Tenha em atenção os itens de System.EnterpriseServices e ClassLibLCE listados em referências .
  20. No Editor de código, clique em do separador. Form1.cs [estrutura] fazer duplo clique em qualquer parte no formulário para criar um processador de eventos Form1_Load . Para este processador de eventos adicione o seguinte código.

    Repare que existem duas secções. A primeira é apenas para fins de registar a biblioteca de classes. É utilizado apenas uma vez. O segundo acciona os eventos do 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. Prima F5 para executar a aplicação e registar a biblioteca de classes.

    Isto torna o subscritor acessível, mas não ainda registado com serviços COM +. Depois do formulário é carregado, fechá-la. Este é o método mais simples de registar uma assemblagem .NET para que pode tirar partido dos serviços COM +. No entanto, para registar desta forma, tem ter sessão iniciada no computador local com direitos administrativos. Se os utilizadores que utilizam a aplicação não têm direitos administrativos para o computador local, pode registar uma assemblagem utilizando o utilitário regasm.exe para os mesmos quando implementar a aplicação.
  22. Execute o snap-in dos Serviços componentes.

    Não pode configurar os subscritores utilizando atributos no .NET versão 1.0. Mas, pode efectuar este procedimento manualmente executando o snap-in Serviços de componentes: abrir Painel de controlo , faça duplo clique em Ferramentas administrativas e, em seguida, faça duplo clique em Serviços de componentes .

    Nota : Se pretender, pode escrever código para automatizar os seguintes passos utilizando a biblioteca de administração de 1.0 COM +. Para obter informações adicionais, ver o conteúdo Library do Object browser.
  23. Expanda Serviços componentes . Expanda computadores . Expanda o meu computador . Expanda aplicações do COM + . Expanda ClassLibLCE . Expanda componentes . Expanda ClassLibLCE.MySubscriber .
  24. Clique com o botão direito do rato na pasta de subscrições , aponte para Novo e, em seguida, clique em subscrição .
  25. No COM + nova subscrição assistente, clique em seguinte . Seleccione a opção subscrever interface IEvSink . Clique em seguinte .
  26. Na página Seleccionar classe de eventos , clique em ClassLibLCE.MyPublisher . (Esta é a classe foi decorada com atributos [EventClass]). Clique em seguinte .
  27. Introduza o nome que pretende utilizar e, em seguida, clique para seleccionar a caixa de verificação activar imediatamente esta subscrição . Clique em seguinte . Clique em Concluir .

Código para o ficheiro 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 o ficheiro 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 o ficheiro de 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();
		}
	}
}
				

Verifique se o Works

  1. Na janela Code Editor, na secção # 1 do ficheiro Form1.cs o código de comentário e uncomment o código na secção # 2.
  2. Execute apenas o ficheiro executável para o projecto HowToLCE. Para o fazer, clique em Gestor de configuração no menu de criar . Desmarque a caixa de verificação criar ClassLibLCE . Clique em Fechar .
  3. Prima F5 para executar a aplicação no modo de depuração.
  4. Quando o formulário é carregado, feche-a.
  5. Prima CTRL + ALT + S para iniciar o Explorador do servidor. Expanda Servers . Expanda o computer name. Expanda registos de eventos . Expanda a aplicação . Expanda ClassLibLCE .

    Tenha em atenção duas entradas de registo de eventos.

Resolução de problemas

  1. Actualize o registo de eventos para ver os movimentos no Explorador do servidor.
  2. Se efectuar alterações a biblioteca de classes depois de executar os procedimentos supra e, em seguida, recriar a biblioteca de classes é muito provável que a assemblagem será bloqueada pelos serviços de componente. Para resolver este problema, utilize um dos seguintes métodos:
    • Clique com o botão direito do rato o componente de Serviços de componentes e, em seguida, clique em Encerrar .

      - ou -
    • Elimine o componente se pretender efectuar alterações significativas no código.



Referências

Para obter informações adicionais sobre eventos de associação livre, visite o seguinte Web site da Microsoft:
Using Loosely Coupled Events
Para obter informações adicionais sobre como implementar e implementar COM + configuradas classes, visite o seguinte Web site da Microsoft:

Propriedades

Artigo: 318185 - Última revisão: 24 de fevereiro de 2014 - Revisão: 3.3
A informação contida neste artigo aplica-se a:
  • Microsoft Visual Studio .NET 2002 Professional Edition
  • Bibliotecas de classe do Microsoft .NET Framework 1.0
Palavras-chave: 
kbnosurvey kbarchive kbmt kbhowtomaster KB318185 KbMtpt
Tradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine translation ou MT), não tendo sido portanto revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 318185

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