Spring.NET – Parte 2 – Web Services

Objetivo

Na primeira parte do tutorial, falamos sobre a capacidade do Spring de “amarrar” as camadas da aplicação através de injeção de dependência.

Nessa parte vamos ver um recurso um pouco mais avançado do Spring que é a possibilidade de “exportar” a camada de negócio da nossa aplicação, seguindo os conceitos tão atuais de “SOA” (Service-Oriented Architecture). Utilizando o Spring, podemos simplesmente “expor” os serviços da nossa aplicação.

O Spring permite que os objetos de seu application context sejam exportados em WebServices (SOAP), .Net Remoting e COM+. Nesse tutorial, vamos falar somente sobre Web Services.

Se você ainda não acompanhou a primeira parte, volte lá https://ericlemes.com/2009/03/12/dotnet-spring-pt1/ e acompanhe. Vamos partir do mesmo exemplo para fazer a “parte 2”. No finalzinho do tutorial tem o código fonte para download.

Configurando o Spring.Net

Para podermos expor nossos Serviços como Web Services, precisamos em primeiro lugar configurar o “handler” do Spring, para que os requests com final “.asmx” (ou o que você quiser) passem para o Spring primeiro. Para isso, devemos adicionar os seguintes nós abaixo do

<add verb="*" path="*.asmx" type="Spring.Web.Services.WebServiceHandlerFactory, Spring.Web"/>

Verifique se o *.asmx já não está sendo direcionado para outro Handler. Por default ele é.

Em seguida, devemos adicionar dentro do contexto (abaixo do nó ) o seguinte nó:

      <object id="PedidoWebService" type="Spring.Web.Services.WebServiceExporter, Spring.Web" lazy-init="true">
        <property name="TargetName" value="PedidoBO" />
        <property name="Namespace" value="http://www.meudominio.com.br/WebServices" />
        <property name="Description" value="Spring.Net Web Service" />
      </object>

Essa configuração diz para o Spring.Net criar uma instância de nome “PedidoWebService” para um objeto do tipo WebServiceExporter. Este objeto recebe como “target” nosso PedidoBO. Em outras palavras, “exporte PedidoBO como um Web Service”.

Testando

Compile e execute a aplicação. Ela vai cair no “default.aspx”. Altere a URL no final para PedidoWebService.asmx.

Voilá! Seu WebService está pronto.

Mas… o que aconteceu aqui!?

Vamos tentar explicar a magia negra. É mais ou menos assim:

  • O usuário mandou um request para PedidoWebService.asmx.
  • Como existe um HTTP Handler configurado para o Spring, o request é direcionado para o WebServiceHandlerFactory.
  • Este por sua vez, usando os recursos de AOP do Spring, “fabrica” (faz em tempo de execução, provavelmente via System.Reflection.Emit) uma classe que anota o nosso PedidoBO com “WebMethod” e qualquer outra coisa necessária para que ele seja acessível via Web.
  • O resultado disso é um Web Service .Net tradicional, porém, criado via “configuração”. Sem uma linha de código.

Código Fonte

O código fonte do nosso exemplo pode ser baixado em http://ericlemes.wikidot.com/local–files/dotnet-spring-pt2/SpringParte2.zip.

Advertisement

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s