ASP.NET 2.0 - Criando Web Services


Então você quer criar o seu próprio Web Service usando ASP.NET 2.0 ?

Nota: Veja também os artigo: ASP.NET -  Criando Web Services   e   VB .NET - Criando WebServices

Com o Visual Studio 2005 (VS 2005) ou mesmo com o Visual Web Developer (VWD) ficou muito mais fácil criar os seus próprios Web Services. Você duvida ? Então veja:

Roteiro para criar um web service:

  1. Abra o Visual Web Developer Express Edition e no menu File selecione New Web Site
  2. Quando a janela de diálogo New Web Site for exibida, selecione a linguagem (VB.NET) e a localização do Web Site
  3. Na janela Solution Explorer clique com o botão direito do mouse no web site e selecione Add New Item. Quando a janela de diálogo Add New Item surgir selecione : 1-O item Web Service   2-Informe o nome do web service    3- Selecione a linguagem   4-Marque a opção - Place code in separate File; Clique no botão Add.
  1. O Visual Web Developer irá criar uma pasta para o web site que contém um arquivo wsNet.asmx e um arquivo code-behind para o web service. O arquivo code-behind wsNet.vb para o arquivo .asmx será colocado em uma pasta App_Code.
  1. O Web Service já é complementa funcional mas neste momento ele é apenas uma casca sem nenhuma funcionalidade útil.

O seu trabalho é justamente incluir métodos no arquivo code-behind para expor as funcionalidades desejadas para o seu web service. Como exemplo vamos criar um método no nosso web service para retornar os dados de uma tabela.

Nota: Para este exemplo eu vou utilizar o SQL Server 2005 Express , criar um banco de dados Clientes.mdf e uma tabela Clientes com os seguintes campos: Codigo,Nome,Endereco,Foto e Renda conforme mostrado na janela DataBase Explorer:

Para saber como criar um banco de dados, uma tabela e incluir dados no SQL Server 2005 Express leia os artigos:

 

Os web services são uma ferramenta muito útil para efetua a comunicação com sistemas remotos ou com sistemas construídos com tecnologias diferentes da usada para criar sua aplicação. Eles são convenientes para encapsular componentes legados COM especialmente quando você necessita acessar funcionalidades nestes componentes a partir de domínios diferentes.

Na ASP.NET um web service consiste de um arquivo .asmx e de uma classe code-behind que fornece a funcionalidade requerida. O conteúdo de um arquivo .asmx consiste de uma única linha que contém a diretiva WebService. A linha é igual a diretiva @ Page usada em um arquivo .aspx . Abaixo temos esta visão do nosso arquivo wsNet2.asmx:

O conteúdo do arquivo code-behind para o web service consiste de uma classe que herda de System.Web.Services.WebService e apresenta um método HelloWorld;

Além disto é incluído um atributo WebService para a definição da classe. Embora não seja explicitamente necessário o atributo WebService permite que você defina o namespace para o web service. Por padrão o namespace é definido para http://tempuri.org/, mas você pode alterar este valor definindo-o para uma URL que represente a sua empresa como http://www.macoratti.net

O VWD e o VS 2005 inclui também um atributo WebServiceBinding para a classe do web service. Este atributo indica que o web service esta em conformidade com a especifica WS-I BP 1.1 - Web Services Interoperability Basic Profile specification, para detalhes veja : http://www.ws-i.org.

Para você incluir funcionalidades úteis a um web service você cria métodos como se fosse qualquer outra classe, exceto pelo fato que você precede cada método com o atributo WebMethod. O atributo WebMethod informa o VWD/VS 2005 que o método é para ser exposto como parte de um web service.

Por exemplo, o método getListaClientes que será mostrado no nosso exemplo consulta uma base de dados por uma lista de clientes e retorna a lista em um DataSet. O número de clientes retornados é definido pelo parâmetro numeroDeClientes. Nada de especial é feito no código para suportar o web service. O VWD/VS 2005 e o .NET Framework cuida da criação do XML e do encapsulamento SOAP usado para transferir os dados para o cliente.

Uma das grandes vantagens de criar web services com o VWD/VS 2005 e ASP.NET é a funcionalidade de teste e debug fornecidas pela ASP.NET. Ela fornece uma série de páginas que cria um testes que pode ser usado para testar todos os métodos expostos do web service; além disto você pode definir breakpoints no código do web service de maneira a percorrer passo a passo o código e assim efetuar a verificação da operação.

Vamos agora a parte prática que é criar o método getListaClientes para obter os dados da tabela Clientes do banco de dados Clientes.mdf criado no SQL Server 2005. Vamos exibir as informações dos campos : Codigo,Nome e Endereco.

Abra o arquivo wsNet2.vb e inclua o seguinte código:

Option Explicit On
Option Strict On

Imports System.Configuration
Imports System.Data
Imports System.Data.SqlClient

Imports System.Web
Imports System.Web.Services
Imports System.Web.Services.Protocols
 
<WebService(Namespace:="http://tempuri.org/")> _
<WebServiceBinding(ConformsTo:=WsiProfiles.BasicProfile1_1)> _
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
Public Class wsNet2
    Inherits System.Web.Services.WebService

    <WebMethod()> _
  Function getListaClientes(ByVal numeroDeClientes As Integer) As DataSet

        Dim dbConn As SqlConnection = Nothing
        Dim da As SqlDataAdapter = Nothing
        Dim dSet As DataSet = Nothing
        Dim cmdTexto As String
        Dim strSQL As String

        Try
            'Obtem a string de conexão do web.config e abre a conexao com o banco de dados
            cmdTexto = ConfigurationManager.ConnectionStrings("dbConnectionString").ConnectionString
            dbConn = New SqlConnection(cmdTexto)
            dbConn.Open()
            'Define a consulta SQL para obter os dados da tabela Clientes
            strSQL = "SELECT Top " & numeroDeClientes.ToString() & " " & _
             "Codigo, Nome, Endereco " & _
             "FROM Clientes " & _
             "ORDER BY Nome"
            'cria um novo dataset e preenche-o com os dados dos clientes
            dSet = New DataSet
            da = New SqlDataAdapter(strSQL, dbConn)
            da.Fill(dSet)

            'retorna a lista de clientes
            Return (dSet)
        Finally
            'limpa a memoria
            If (Not IsNothing(dbConn)) Then
                dbConn.Close()
            End If
        End Try
    End Function
End Class

Para testar o web service rode o projeto usando o servidor ASP.NET. Será apresentada a seguinte página referente ao arquivo wsNet2.asmx

Quando você clicar no link GetListaClientes será apresentada a página abaixo onde você deve informar o parâmetro que indica quantos clientes deseja obter referente ao parâmetro numeroDeClientes. Esta página exibe o conteúdo da requisição XML e mensagem response para o método usando SOAP, Get HTTP e Post HTTP.

Ao informar o valor do parâmetro e clicar no botão Invoke, a ASP.NET gera uma requisição HTTP e submete-a ao web service. O Web Service responde com um HTTP response contendo os dados requisitados no formato XML. Para o exemplo é retornado a lista de 2 clientes solicitados conforme figura abaixo:

Nada de muito rebuscado não é mesmo. É óbvio que podemos criar web services mais complexos e com maior utilidade.

Até o próximo artigo ASP.NET...

referências:    http://www.w3.org/TR/wsdl


José Carlos Macoratti