É muito comum o emprego de componentes COM+ como a camada de negócios em aplicações n-tiers. Dessa forma, a nosso conhecimento em desenvolver aplicativos que suportem esta estrutura, torna-se proeminente, também, na arquitetura .NET. Neste artigo, espero passar o mínimo para que você seja capaz de escrever um componente COM e usá-lo em suas aplicações .NET.

A estrutura do componente

O componente que escreveremos é bastante simples: ele acessará um banco de dados do SQL Server (Northwind) e retornará os dados solicitados pelo nosso programa. Os campos da tabela que consultaremos podem ser vistos na Figura 1.

tabela estrutura
Figura 1. Estrutura da tabela Employees usada em nossos exemplos
Escolhemos a tabela de exemplo do banco de dados SQL Server para facilitar o desenvolvimento deste artigo, já que a criação de um banco mais detalhado estaria fora do escopo deste artigo. Porém, você pode ficar à vontade para desenvolver esta etapa com qualquer outro banco de dados, desde que saiba acessá-lo via ADO.NET.

Com o banco de dados já pronto podemos iniciar o desenvolvimento do nosso componente COM. No Visual Studio .NET inicie uma nova aplicação do tipo Class Library e salve com o nome pBusinessComp. Para que possamos acessar e incluir as funcionalidades de um componente COM legado em nosso objeto, devemos referenciar o namespace System.EnterpriseServices em nosso projeto, e adicionarmos adicioná-lo em nossa classe:

Imports System.EnterpriseServices
Imports System.Data
Imports System.Data.SqlClient

Altere o nome da classe para BComp e acrescente os seguintes atributos na declaração da classe, listados na Listagem 1.

ObjectPoolingAttribute(5, 20, 30)> _
Public Class BComp

 Inherits ServicedComponent
Listagem 1. Atributos da classe BComp

O atributo TransactionAttribute nos permite configurar o comportamento do nosso objeto transacional. Em nosso exemplo não trabalharemos com modificações nos registros (INSERT, UPDATE, DELETE). Sendo assim, poderíamos omitir este atributo de nossa classe sem nenhuma perda de desempenho.

ObjectPoolingAttribute configura a atuação do pooling de objetos - pense no pooling de objetos como uma espécie de repositório de objetos já criados - do COM+ sobre o nosso componente. E por último, observe que a nossa classe herda de ServicedComponent, que é a classe base para o desenvolvimento de componentes COM transacionais.

Após ter configurado o comportamento da nossa classe implementaremos um método chamado GetEmployeeInfo. Este método recebe como parâmetro um Id numérico e retorna um DataSet com os dados do banco. Implemente o método como descrito na Listagem 2.


Const strSel = "SELECT EmployeeID, LastName, FirstName, Title 
FROM Employees 
WHERE EmployeeID = " 
Const strConn = "Initial Catalog=Northwind;Data Source=SqlServer;
User id=sa;
password=;"
Public Function GetEmployeeInfo(ByVal number As Integer) 
As DataSet 'Criando os objetos
Dim objConn As New SqlConnection(strConn)
Dim objAdap As New SqlDataAdapter(strSel + 
  Convert.ToString(number), objConn)
Dim dsDados As 
New DataSet 'Recuperando os dados do bd
objConn.Open()
objAdap.Fill(dsDados, "Dados")
'Fechando o banco
objConn.Close()
'Enviando o Dataset
GetClientInfo = dsDados
End Function
Listagem 2. Método GetEmployeeInfo

Após ter codificado o componente como exibido nas listagens acima, devemos instalá-lo no catálogo do COM+. Para isso devemos gerar um Strong Name para nosso componente. Este nome forte, serve como uma chave identificadora exclusiva do nosso componente, sendo pré-requisito para sua instalação no ambiente COM+. Para criar esta chave, usaremos o utilitário de linha de comando sn incluso no Framework .NET.

Para facilitar o uso dos utilitários de linha de comando citados no artigo, copie-os para o diretório da nossa aplicação.

No console de sua máquina, entre com o seguinte comando: sn -k BusinessCompKey.snk. Este comando criará uma chave de nome BusinessCompKey em nosso diretório.

O próximo passo será referenciá-la em nosso componente. No Solution Explorer aplique um clique duplo sobre o arquivo AssemblyInfo.vb e acrescente a seguinte linha:

AssemblyKeyFile("C:\BusinessCompKey.snk")> 

Pronto! agora é dar um Build Solution.

Instalando o componente

Para instalarmos o nosso componente utilizaremos outro utilitário de linha de comando do Framework, chamado RegSvcs. Volte à janela de console e entre com o comando regsvcs BusinessComp.dll, que efetuará a instalação (Figura 2) e configuração do nosso componente seguindo as informações descritas em nosso código.

console
Figura 2. Componente disponível no catálogo do COM+

Usando o componente

Para avaliar o funcionamento do nosso componente criaremos uma aplicação ASP.NET que receberá os dados do banco Access. No Visual Studio.NET inicie uma nova aplicação do tipo ASP.NET e salve com o nome WebComApp. Para trabalhar com o componente COM+, nossa aplicação deverá referenciar o namespace System.EnterpriseServices e o assembly BusinessComp.dll. Após ter adicionado as referências pressione F7, para alternar a visualização para o código do form e insira a seguinte linha:

Public objCOM As BusinessComp.BComp

Abra a região chamada "Web Form Designer Generated Code" da nossa classe e insira o código da Listagem 3 no método Page_Init. Este código instanciará o nosso objeto.

Private Sub Page_Init(ByVal sender 
  As System.Object, ByVal e As System.EventArgs) 
  Handles MyBase.Init
  InitializeComponent(
  'Instanciando o objeto
   objCOM = New BusinessComp.BComp()
 End Sub
Listagem 3. Método Page_Init

Volte para o Form Design (Shift+F7) e inclua os controles como exibido na Figura 3.

webcontrols.JPG
Figura 3. WebControls exibidos no IDE do VS.NET

Implemente o manipulador do evento OnClick do botão como mostrado na Listagem 4. Neste código faremos uma consulta ao banco de dados, através do método GetEmployeeInfo passando o conteúdo do TextBox como parâmetro.


Private Sub Button1_Click(ByVal sender 
As System.Object, ByVal e As System.EventArgs) 
Handles Button1.Click
'DataSet que receberá os dados
Dim myDataSet As DataSet= objCOM.GetEmployeeInfo
(CInt(TextBox1.Text)) 'Ligando o grid aos dados
DataGrid1.DataSource = myDataSet
'Carregando os dados
DataGrid1.DataBind()
End Sub
Listagem 4. Evento OnClick

Pronto! Basta executar a aplicação, informar um parâmetro no TextBox e consultar os dados (Figura 4).

final.JPG
Figura 4. Execução da aplicação web

Conclusão

Vimos neste artigo como tirar proveito do suporte ao COM+ do .NET Framework, e para maiores informações examine o MSDN Library. Até a próxima!