Desenvolvimento - Web Services
Desenvolvendo e Consumindo um Web Service com XML usando Visual Studio 2008 "Orcas" Beta 2
Baseando-se no conceito da frase que diz: "É fazendo que se aprende...". Iremos desenvolver um sistema simples para consulta de mensagens bíblicas, mais conhecido por "Divinas Promessas", acessível através de um WebService, o qual poderá ser utiltizado por outros sites ou aplicações desktop.
por Adriano Santos1. Introdução
Baseando-se no conceito da frase que diz: "É fazendo que se
aprende...". Iremos desenvolver um sistema simples para consulta de
mensagens bíblicas, mais conhecido por "Divinas Promessas", acessível através de
um WebService, o qual poderá ser utiltizado por outros sites ou aplicações
desktop. Embora eu seja envangélico, minha intenção aqui não é promover nenhuma
religião ou discutir este assunto, e sim, mostrar como podemos vincular
tecnologia ao fornecimento de um serviço útil e com isto aprender as técnicas e
conceitos envolvidos no desenvolvimento deste.
Iremos usar neste artigo
o novíssimo Visual Studio Professional 2008 "Orcas" Beta 2, que foi
disponibilizado pela Microsoft onde segundo ela mesma deve ser a última versão
de testes a ser liberada antes da versão final, e realmente trás mudanças
significativas principalmente para desenvolvimento Web, veremos algumas dessas
mudanças no decorrer deste artigo.
Não pretendo aqui tratar os aspectos
de instalação do mesmo, contudo gostaria de relatar que o processo foi
relativamente simples, bastando somente fazer o download da imagem do DVD. Outro
detalhe importante foi que a versão 2008 Beta 2 se comporta muito bem com a
versão 2005 na mesma máquina.
2. Desenvolvendo o Web Service Divinas Promessas com XML
Iremos criar nosso Serviço Web seguindo o SOAP (Simple Object Access
Protocol), que basicamente falando, nada mais é do que um protocolo para troca
de mensagens que usa a linguagem XML. Este serviço fará acesso a um banco de
dados SQL Server, e efetuará uma consulta simples à uma tabela dentro do banco
de dados "msgbiblicas.mdf", que estarei disponibilizando junto com o código
fonte de nossa aplicação.
Vamos nessa!
Criaremos um
WebService no Visual Studio .NET. Portanto, execute-o e selecione "New | Project
| Visual C# Projects | ASP.NET Web Service Application". O nome de nosso projeto
será "webmsgbiblicas" (Figura 2.a). Observe que para manter compatibilidade da
aplicação em clientes com versões antigas do .NET Framework, podemos também
selecionar para qual versão do .NET nosso projeto se destina, neste caso,
mantenha selecionado a versão 3.5.
fig. 2.a.: Criando um projeto ASP.NET Web
Service Application no Visual Studio 2008 "Orcas"
Como
teremos consulta ao Banco de dados, precisamos da "String de Conexão", portanto
vamos criar uma conexão com o banco de dados e a partir desta obter nossa
"string". Visualize o "Server Explorer", caso não esteja disponível, selecione
"View | Server Explorer". Chame o menu de contexto (botão direito do mouse) do
"Data Connections", após "Add Connection..." (figura 2.b).
fig. 2.b.: Criando conexão com banco via
Server Explorer
Na próxima tela "Chose Data Source", na
lista de "Data Sources" selecione "Microsoft SQL Server" em "Data Provider",
selecione ".NET Framework Data Provider for SQL Server" (Figura 2.c), clique em
"Continue".
fig. 2.c.: Selecionando "Data Source" e
"Data Provider"
Em "Add Connection", insira as informações
para acesso ao banco (figura 2.d). Lembre-se, que deverá colocar os dados
referente ao seu servidor SQL Server e banco de dados, portanto as informações
poderão diferir das que aqui estão ilustradas. Clique em "Ok" para confirmar e
criar nossa conexão.
fig. 2.d.: Informações necessárias para
acesso ao banco
Para obter a string de conexão, basta então
clicar na conexão gerada, e em "Properties", buscar a propriedade "Connection
String" (Figura 2.e). Com o passar do tempo, conforme for ganhando experiência,
verá que este procedimento será desnecessário. Mas a caráter de aprendizado,
fica aqui este passo-a-passo para obter a string correta de conexão, sem muito
esforço, Claro!
fig. 2.e.: Propriedade "Connection
String" do nosso "Data Connection".
Colocaremos agora o
código do WebService. Mas antes iremos analisar o seguinte: O cliente que irá
consumir este serviço, não poderá escolher a mensagem que deseja ler, e sim, o
sistema irá sortear uma mensagem para ele. Portanto, iremos criar uma função
capaz de sortear um número qualquer que posteriormente iremos usar para buscar a
mensagem no banco, para isso no editor do código digite as linhas a seguir, logo
abaixo da declaração da classe:
webmsgbiblicas.asmx.cs
/// <summary> /// Sorteia um número aleatorimente dentro de um Range. /// </summary> /// <param name="intLowerBound">Número inicial da seqüência.</param> /// <param name="intUpperBound">Número final da seqüência.</param> /// <returns></returns> private int GetRandomNumberInRange(int intLowerBound, int intUpperBound) { Random randomGenerator; int intRandomNumer; //Criando e inicializando nosso gerador de número randômicos randomGenerator = new Random(); //Buscar próximo número dentro da seqüência informada intRandomNumer = randomGenerator.Next(intLowerBound, intUpperBound + 1); //Retorna o número randômico encontrado return intRandomNumer; } |
Iremos agora para o método que fará a consulta na tabela "msgbiblicas", ela tem a estrutura informada na figura 2.f.
fig. 2.f.: Estrutura da tabela "msgbiblicas" No Editor, logo após a função "GetRandomNumberInRange", insira o código abaixo informado:
webmsgbiblicas.asmx.cs
/// <summary> /// Busca aleatoriamente uma mensagem bíblica /// </summary> /// <returns></returns> [WebMethod(Description = "Busca aleatoriamente uma mensagem bíblica!")] public string BuscarMsgBiblica() { //String de Conexao string strConexao = "Data Source=localhost;Initial Catalog=msgbiblicas;Integrated Security=True"; //String que conterá o resultado string strResultado = string.Empty; //Instância da nossa conexão SqlConnection con = new SqlConnection(strConexao); //Instância do nosso objeto command //Atribuindo a ele a conexão SqlCommand exec = con.CreateCommand(); //Iniciando tratamento de erros try { //Abertura da conexao con.Open(); //Definindo o objetivo da conexao a ser utilizada exec.CommandType = CommandType.Text; //Atribuindo nossa instrução exec.CommandText = "SELECT mensagem +" "+ titulo FROM msgbiblicas WHERE seq = @Seq"; //Sorteia um número para buscar nas mensagens. //Iniciando de 1 até o total de mensagens, que neste caso é 697 int intSorteio = GetRandomNumberInRange(1, 697); //Criando os parâmetros exec.Parameters.Add("@Seq", SqlDbType.Int).Value = intSorteio; //Buscando mensagem e colocando na string de resultado strResultado = (string)exec.ExecuteScalar(); } catch (Exception e) { //Retorna string amigável do erro! strResultado = "Ops! Falhou. Informe o erro ao Administrador. Erro: " + e.Message; } finally { //Fechando a conexao e liberando memória if (con.State == ConnectionState.Open) con.Close(); //liberando os objetos para o Garbage Collector con.Dispose(); exec.Dispose(); } //retorna o resultado return strResultado; } |
Algumas considerações importantes são:
- Observem que não fazemos concatenação de strings e valores para formar a instrução. Neste caso fazemos uso de parâmetros, que além de deixar o código mais limpo o deixa mais seguro também.
- O método ExecuteScalar, é funcional somente quando temos certeza que a instrução retornará somente um valor. Portanto, observem que na instrução solicitamos para o SGBDR concatenar as colunas "Mensagem" e "Título" de um registro com o número de seqüência sorteado de forma randômica.
- Colocamos o fechamento da conexão dentro de um try/finally, pois isto garante a liberação da conexão em caso de erro.
3. Testando nosso WebService
Iremos testar o WebService executando-o a partir de "Debug | Start Without
Debugging". Observamos o resultado na figura 3.a.
fig. 3.a.: Tela inicial de teste do
WebService
Clique no nome do serviço, neste caso
"BuscarMsgBiblica". Observe o resultado na figura 3.b.
fig. 3.b.: Invocando
o WebService
Clique no botão "Invoke" e observe o resultado
na figura 3.c.Veja que o retorno do Serviço é exatamente uma seqüência XML,
garantindo assim que nosso aplicativo possa ser utilizado por uma grande gama de
sistemas cliente.
fig. 3.c.: Resultado
XML que aparecerá no navegador após invocação do método.
4. Consumindo o WebService "Divinas Promessas"
Tudo pronto e testado, iremos agora criar um projeto Web onde o intuito central será usufluir do Serviço Web que criamos. Para isto, no Visual Studio, selecione "File | New Project | ASP.NET Web Application", dê o nome ao projeto de "DivinasPromessas". No campo "Solution", selecione "Add to Solution", isto indica que queremos adicionar este projeto dentro da mesma solução onde implementamos o WebService. Clique "Ok" para confirmar.
Há várias mudanças na nova versão do Visual Studio, principalmente na
interface, agora ainda mais rica para auxiliar no desenvolvimento Web. Vejamos
alguns detalhes através da figura 4.a.
fig. 4.a.: IDE
Visual Studio 2008 "Orcas" para desenvolvimento Web
- Para
manipulação de layout dos webforms agora temos mais um recurso de visualização
chamado "Split", um recurso muito conhecido para os profissionais que usam o
Dreamweaver da Macromedia, onde podemos ver o código HTML e o resultado do
layout, tudo dentro de uma mesma janela;
- Também temos um suporte mais
avançado para CSS através das guias "Manage Styles" e "Apply Styles". Com isto
podemos acrescentar, editar e aplicar os estilos que desejamos para nossas
páginas, de uma forma mais rápida e prática.
Edite o "WebForm" para que tenha a aparência parecida com a figura 4.b, insira um "Label", dê o nome (ID) de "lblMensagem", insira também um "Button" dê a ele o nome (ID) "btnNovaMensagem" e o texto ("Text") deverá ser "Nova Mensagem".
fig. 4.b.: Interface
do WebForm para consulta de Divinas Promessas.
Precisamos agora referenciar o nosso WebService dentro deste projeto para que possamos utilizá-lo. Portanto, clique com botão direito do mouse (chamar menu de contexto) em "DivinasPromessas", selecione "Add Web Reference..." (figura 4.c).
fig. 4.c.: Adicionando
referência para o WebService
Na janela que se abre (figura 4.d), selecione "Web Services in this Solution". Após, selecione "webmsgbiblicas". Dê o nome "wsmsgbiblicas" (figura 4.e) e clique em "Add reference...".
fig. 4.d.:
Adicionando referência para o WebService
fig. 4.d.:
Adicionando referência para o WebService
Perfeito, agora
somente precisamos inserir na página o código necessário para a chamada do
serviço, iremos então criar um procedimento capaz de executar esta tarefa.
Proceda assim, clique duas vezes no botão "btnNovaMensagem", para acessar o
Editor de Código, logo após o método "btnNovaMensagem_Click" criado, insira o
código especificado abaixo:
Default.aspx.cs
/// <summary> |
Iremos agora chamar este método no evento "Click" do botão btnNovaMensagem e também em "Load" do página, para que ao carregar a página, o aplicação já busque e exiba uma mensagem para o usuário. O código pronto ficará conforme descrito a seguir:
Default.aspx.cs
using System; using System.Data; using System.Configuration; using System.Collections; using System.Linq; 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 System.Xml.Linq; namespace DivinasPromessas { public partial class _Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { BuscarMensagem(); } protected void btnNovaMensagem_Click(object sender, EventArgs e) { BuscarMensagem(); } /// <summary> /// Realizar consulta para nova mensagem /// </summary> private void BuscarMensagem() { //instanciando o serviço wsmsgbiblicas.webmsgbiblicas ws = new wsmsgbiblicas.webmsgbiblicas(); //executando o método para buscar mensagem e //colocando o resultado no label lblMensagem.Text = ws.BuscarMsgBiblica(); } } } |
Vamos então conferir como ficou nossa aplicação, clique em "Debug | Start Without Debugging" ou Ctrl+F5 conforme preferir. Veja o resultado na figura 4.e.
fig. 4.e.: Aplicação
web em execução
5. Conclusão
Observamos aqui o quanto é fácil desenvolver um WebService, integrando também uma consulta ao banco de dados. Criamos e testamos um serviço simples, usando algumas características peculiares do Visual Studio, como a obtenção da String de Conexão e vimos como criar uma função de sorteio de números usando a Classe Random.
Conhecemos algumas das novas características da IDE do Visual Studio 2008, bem como o processo simples para consumir um serviço web em nossas aplicações.
Até o próximo pessoal!
6. Referências
Visual Studio 2008 Beta 2
http://msdn2.microsoft.com/pt-br/vstudio/default.aspx
Wiki sobre Web Services
http://pt.wikipedia.org/wiki/Web_service
Dev Center - Web Services (Microsoft)
http://www.microsoft.com/brasil/msdn/webservices/default.mspx
Web Services com Banco de Dados por Mauro Sant"Anna
http://www.microsoft.com/brasil/msdn/tecnologias/webservices/web_services_1.aspx
- Verificando disponibilidade de um serviço WCF ou WebServiceC#
- Criando um WebService com ASP.NET Razor e WebMatrixWeb Services
- Construindo um List Suggest com ASP.NET Web Services e JQueryASP. NET
- Consumindo serviços REST com HttpClientWeb Services
- REST e o WSDLWeb Services