Desenvolvimento - ASP. NET

Curso ASP.NET 3.5 em VB.NET e C# - Criando e Consumindo WebServices

Um Web Service é uma aplicação web que disponibiliza um serviço qualquer. Quem usa o serviço é o consumidor. As informações trafegam sobre http, através de um protocolo conhecido com SOAP. O formato em que estar informações trafega é nada mais do que em XML.

por Fernando Amaral



Ao menos que você tenha estado em uma caverna nos últimos anos, com certeza já ouviu falar em XML e Web Service.

XML é um padrão de troca de informações, no formato texto. É um padrão aberto e legível até para humanos, por isso tem se tornado um padrão na indústria. Não vou ficar aqui explicando o que o XML é ou não é, pois existem toneladas de material na WEB sobre o mesmo, estou apenas o introduzindo já que ele é importantíssimo na funcionalidade dos Web Services.

Um Web Service é uma aplicação web que disponibiliza um serviço qualquer. Quem usa o serviço é o consumidor. As informações trafegam sobre http, através de um protocolo conhecido com SOAP. O formato em que estar informações trafega é nada mais do que em XML.

Vários outros acrônimos se aplicação a um Web Service. WSDL, ou Web Service Description Languagem é um arquivo disponibilizado pelo serviço com informações a quem estiver interessado em consumi-lo. Disco é um protocolo de busca de Web Services.

Com o advento do .NET, criar e consumir Web Services se tornou muito fácil. Quase tudo é feito “por trás das câmeras” e você precisa se preocupar unicamente com seu produto. Nesta seção vamos criar e consumir um Web Service.

Criando um Web Service

Para criar um Web Service, vá em New Web Site, e selecione ASP.NET Web Service.

Por padrão é criado um arquivo asmx, que é equivalente a uma página aspx, porém sua função é prover serviços e não conteúdo. Cada arquivo asmx tem um arquivo .vb ou .cs equivalente, onde são criados os métodos a serem publicados.

Um método deve conter um atributo webmetodo, caso contrário ele estará disponível dentro da aplicação mas não externamente a esta. Se você examinar o arquivo .cs ou .vb criado, notará que já existe um método de demonstração criado automaticamente:

<WebMethod()> _

Public Function HelloWorld() As String

        Return "Hello World"

End Function

[WebMethod]

public string HelloWorld() {

        return "Hello World";

}

Vamos criar um método para realizar uma consulta em um banco de dados, em seguida vamos fazer uma aplicação para consumir este método.

Nosso método simplesmente vai receber uma consulta como parâmetro, executa-la usando classes do ADO.NET e retornar o resultado. Todo o restante é problema do FrameWork, nós não precisamos nos preocupar em gerar arquivos WSDL, gerar XML, incluí-lo na mensagem SOAP etc., tudo é feito de forma transparente.

Abaixo segue todo o arquivo service.vb / .cs

Imports System.Web

Imports System.Web.Services

Imports System.Web.Services.Protocols

Imports System.Data

Imports System.Data.SqlClient

<WebService(Namespace:="http://tempuri.org/")> _

<WebServiceBinding(ConformsTo:=WsiProfiles.BasicProfile1_1)> _

<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _

Public Class Service

     Inherits System.Web.Services.WebService

<WebMethod()> _

Public Function Consulta(ByVal SQL As String) As DataSet

        Dim Adapter As New SqlDataAdapter(SQL, "Data Source=SERVIDOR;Initial Catalog=AdventureWorks;User ID=sa;Password=123456")

        Dim Data As New DataSet

        Adapter.Fill(Data)

        Return Data

End Function

End Class

using System;

using System.Web;

using System.Web.Services;

using System.Web.Services.Protocols;

using System.Data;

using System.Data.SqlClient;

[WebService(Namespace = "http://tempuri.org/")]

[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]

public class Service : System.Web.Services.WebService

{

    public Service () {

        //Uncomment the following line if using designed components

        //InitializeComponent();

}

 [WebMethod]

public DataSet Consulta(string SQL) {

SqlDataAdapter Adapter = new SqlDataAdapter(SQL, "Data Source=SERVIDOR;Initial Catalog=AdventureWorks;User ID=sa;Password=123456");

DataSet Data = new DataSet();

Adapter.Fill(Data);

return Data;

}

   

}

Note que a única parte adicionada foi o método Consulta.

Rode a aplicação, é exibida uma página com informações do Web Service:

Clique em Service Description, é exibido o arquivo WSDL gerado pelo ASP.NET, este arquivo contém informações sobre o serviço e é um meio de consulta para um aplicação que deseja consumi-la:

Você ainda pode testar o Web Service, para isso volte a página inicial, e clique sobre o nome do método Consulta. A página exibe um campo onde você deve entrar o valor do parâmetro, nesta casa SQL. Preencha com um comando SQL:

Clique em Invoke. O Resultado é exibido em uma nova janela:

Consumindo o Serviço

Para consumir o serviço crie adicione uma nova aplicação ASP.NET a solução. Clique em propriedades, em seguida clique em Add Web Reference, é exibida a caixa de dialogo abaixo:

 

Clique em Web Service in this Solution. Na janela seguinte em Service, que o nome do serviço que criamos no nosso Web Service:

 

Em Web reference name mantenha o nome sugerido e clique em Add Rererence:

 

Agora vá a nossa página Default.aspx, adicione um GridView, e no evento OnLoad da página adicione o seguinte código:

Imports System.Data.SqlClient

Imports System.Data

Imports localhost.Service

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

        Dim Con As New localhost.Service

        Dim Ds As DataSet = Con.Consulta("SELECT * FROM” Person.Address"

        GridView1.DataSource = Ds

        GridView1.DataBind()

End Sub

using System;

using System.Data;

using System.Configuration;

using System.Web;

using System.Web.Security;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Web.UI.WebControls.WebParts;

using System.Web.UI.HtmlControls;

using localhost;

public partial class _Default : System.Web.UI.Page

{

    protected void Page_Load(object sender, EventArgs e)

    {

        Service Con = new Service();

        DataSet Ds = Con.Consulta("SELECT * FROM Person.Address");

        GridView1.DataSource = Ds;

        GridView1.DataBind();

    }

}

Rode a aplicação e observe o GridView ser preenchido.

Abstraia o fato de você estar rodando o serviço e o consumindo em uma mesma maquina, com um Web Service é possível trocar e fornecer informações de qualquer lugar, através de ambientes heterogêneos ou mesmo incomunicáveis de uma outra forma, utilizando um protocolo aberto e trocando informações através de um padrão reconhecido por toda a industria (XML).

Fernando Amaral

Fernando Amaral - Certificado PMP pelo PMI, CDIA+ pela CompTia, MCP, MCAD, MCSD, MCDBA, MCT pela Microsoft. Pós Graduado em Gestão de Sistemas de Informação (UNIDERP) e Melhoria em Processos de Software (UFLA). Atualmente reside em Campo Grande, MS, onde presta consultoria, treinamentos e palestras na área de TI.
Blog:
http://www.fernandoamaral.com.br.