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 +:
Clique em Iniciar , aponte para programas , aponte para Microsoft Visual Studio .NET e, em seguida, clique em Microsoft Visual Studio. NET .
Clique em novo projecto .
Em Project Types , clique em Visual C# Projects .
Nos modelos , seleccione a Aplicação do Windows .
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.
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 .
Em Project Types , clique em Visual C# Projects .
Na modelos , clique em Biblioteca de classes .
Na caixa nome , escreva ClassLibLCE e, em seguida, clique em OK .
No Solution Explorer, em ClassLibLCE , clique com o botão direito do rato em References e, em seguida, clique em Add Reference .
No separador .NET , em referências , clique em System.EnterpriseServices e, em seguida, clique em Seleccionar . Clique em OK .
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() .
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();
}
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.
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");
}
}
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"
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.
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"
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.
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.
No separador .NET , clique em System.EnterpriseServices .
No separador projectos , clique em ClassLibLCE .
Clique em Seleccionar .
Clique em OK .
Tenha em atenção os itens de System.EnterpriseServices e ClassLibLCE listados em referências .
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();
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.
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.
Expanda Serviços componentes . Expanda computadores . Expanda o meu computador . Expanda aplicações do COM + . Expanda ClassLibLCE . Expanda componentes . Expanda ClassLibLCE.MySubscriber .
Clique com o botão direito do rato na pasta de subscrições , aponte para Novo e, em seguida, clique em subscrição .
No COM + nova subscrição assistente, clique em seguinte . Seleccione a opção subscrever interface IEvSink . Clique em seguinte .
Na página Seleccionar classe de eventos , clique em ClassLibLCE.MyPublisher . (Esta é a classe foi decorada com atributos [EventClass]). Clique em seguinte .
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
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.
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 .
Prima F5 para executar a aplicação no modo de depuração.
Quando o formulário é carregado, feche-a.
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
Actualize o registo de eventos para ver os movimentos no Explorador do servidor.
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.
Artigo: 318185 - Última revisão: quarta-feira, 24 de Setembro de 2003 - 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:
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
Qual foi o esforço que despendeu pessoalmente para utilizar este artigo?
Muito baixo
Baixo
Moderado
Elevado
Muito elevado
Diga-nos porquê e o que podemos fazer para melhorar estas informações
Obrigado! Os seus comentários são utilizados para ajudar-nos a melhorar o conteúdo do nosso suporte. Para obter mais opções de assistência, visite a Home Page de Ajuda e Suporte.