COM+ Services em ASP.NET

É muito comum o emprego de componentes COM+ como a camada de negócios em aplicações n-tiers. Veja como desenvolver aplicativos que suportem esta estrutura.

É 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.

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.

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.

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).

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!

Artigos relacionados