

| com exemplos em VB |
| Componente para deixar forms em Vb semelhantes às telas do winnamp |
| Componente para colocar sua aplicação VB no Systray |
| Componente para transformar sua aplicação VB em serviço |
| Ferramentas úteis para quem usa Olap Server |
| |

![]() |
||||||||
|
|
||||||||
Quer
saber mais?
Certifique-se como MCP em SQL Server
Faça um treinamento na Búfalo Informática
Trocando
dados em XML com SQL Server
Utilizando o ISAPI Filter do SQL Server para troca de dados
via HTTP
Faça o download do código fonte dos exemplos deste artigo em nossa página de download
A comunicação entre servidores na web é sempre um assunto complexo, dadas as questões de segurança, as múltiplas portas de comunicação utilizadas para a realização da comunicação, os firewalls que protegem as redes, entre muitas outras questões envolvidas.
O XML veio facilitar o processo de comunicação entre aplicações trazendo um formato de dados que pode facilmente ser transmitido via protocolo HTTP, o protocolo padrão de servidores web e normalmente aceito pelos firewalls.
O SQL Server 2000 trouxe muitos recursos para permitir a disponibilização de dados via XML na Web, vamos analisar como esses recursos funcionam. Como o assunto é extenso estarei com esse artigo iniciando uma série que terá seguimento nos próximos números desta revista. Dividirei os artigos de acordo com os tipos de query possíveis, URL, XPATH, Template, POST e por fim a criação de WebServices diretamente a partir de procedures.
A disponibilização de informações via http depende da existência de um servidor Web, no caso o IIS da Microsoft, que permite a comunicação via porta 80. No menu iniciar do servidor SQL Server encontramos a uma aplicação chamada Configure SQL XML Support in IIS (na verdade um snap-in para o MMC). Através desta aplicação podemos nos conectar a um servidor IIS e configurar um diretório virtual para o SQL Server.
Devemos ter uma pasta em disco disponível para ser utilizada pelo diretório virtual. Após criado, será achamado a partir do site configurado. Por exemplo, se existe um site default que responde pelo nome da máquina (http://SERVIDOR por exemplo) um diretório virtual chamado SQL responderá como http://SERVIDOR/SQL , por exemplo.
Na primeira tela exibida ao criarmos o diretório virtual devemos dar o nome do diretório virtual e sua localização física dentro do servidor Web. Em seguida precisaremos configurar as guias Security, Data Source, Settings, Virtual Names e Advanced.

Figura 1: A 1a tela de configuração do diretório virtual
do SQL Server, onde deve ser especificado nome e caminho
4 Tipos de query
podem ser realizadas através deste diretório virtual : Querys
via URL, baseadas em template, utilizando XPATH ou via POST. Para todas é
necessário que exista uma conexão com o SQL Server. A conexão
pode ser feita de duas formas : Utilizando as credencias do próprio usuário
que encontra-se realizando a query ou utilizando credenciais padrões,
independentemente de quem seja o usuário que esteja fazendo a query.
Na primeira opção é necessário uma maior administração, pois todos os usuários que fizerem acesso aos dados precisarão estar cadastrados no domínio em que os servidores estiverem e precisarão ter acesso ao SQL Server. Normalmente esse modelo de segurança é escolhido para Intranets ou Extranets.
A utilização de um usuário padrão de acesso a dados é utilizada ou para dar acesso público aos dados ou para transferir para a aplicação a responsabilidade de controlar quais usuários terão realmente acesso aos dados.
Desta forma, na guia security, se escolhermos a opção "Always log on as" poderemos especificar um login único para acesso ao SQL Server. O SQL Server, por sua vez, permite que seja utilizada a segurança standard ou integrada para acesso ao servidor. A escolha, aqui, depende de como encontra-se configurado o servidor de dados. Se com segurança standard, você utilizará um usuário cadastrado no próprio SQL Server, se com segurança integrada você utilizará um usuário cadastrado no sistema operacional.
Por outro lado, desejando que o usuário via Web utilize suas próprias credenciais para acesso aos dados podemos fazer isso escolhendo uma das opções mais abaixo : Use Windows Integrated Authentication ou Use Basic Authentication . No primeiro caso o login do windows será reconhecido pelo IIS, enquanto que no 2o caso o IE pedirá nome e senha para o usuário.

Figura 2 : Tela de configuração de segurança do diretório
virtual do SQL Server
Tendo configurado
adequadamente a guia security devemos então configurar a guia Data Source
apontando para o servidor e banco de dados que serão acessados.

Figura 3 : Guia Data Source, para configuração do servidor
e banco a serem acessados
Devemos então configurar a guia Settings determinando qual (ou quais) dos 4 tipos de querys que poderão ser realizadas através deste servidor (URL, template,XPATH e POST). Observe que nem sempre é o desenvolvedor que estará configurando este diretório virtual. Muitas vezes esse diretório virtual estará sendo configurado por um administrador de rede que determinará quais tipos de query os programadores poderão fazer através deste dirtório virtual.
Vamos então configurar todos os tipos de querys e testa-los um por um.
URL Querys
Feitas as configurações acima já podemos fazer querys via URL tal como o exemplo abaixo :
http://localhost/sql?sql=select+au_fname+from+authors+where+au_id='172-32-1176'+for+xml+auto&root=ROOT
Observe que existem 2 parâmetros na URL : SQL e ROOT. O parâmetro SQL contém a instrução SQL a ser executada enquanto que o parâmetro ROOT indica o nome do nó raiz do documento XML de retorno, pois o FOR XML não retorna um nó raiz. O banco em si não gera o nó raiz, ele é gerado pelo ISAPI Filter do diretório virtual a partir da identificação deste parâmetro ROOT.

Figura 4 : Guia Settings determinando quais formas de comunicação
estarão habilitadas
A apresentação, neste exemplo, está sendo feita diretamente
em XML. Para que a apresentação possa ser formatada é necessário
utilizar uma linguagem chamada XSL. A linguagem XSL, derivada do XML, permite
transformar um documento XML em outro formato que desejarmos. No exemplo deveremos
transformar o XML resultante em HTML. No quadro 1 você observa o código
XSL para realizar a transformação.
O arquivo XSL acima precisará estar salvo do diretório virtual criado anteriormente. Na linha da query precisamos adicionar um parâmetro, xsl, determinando o nome do arquivo XSL que será utilizado. Veja a linha da query :
http://localhost/sql?sql=select+au_fname+from+authors+where+au_id='172-32-1176'+for+xml+auto&root=ROOT&xsl=autores1.xsl
Claro que desta forma não ficou muito útil, o usuário não saberá digitar isso na URL. Desta forma este método existe para ser utilizado por aplicações. Veja os exemplos nos quadros 2, 3, 4, 5 e 6 :
<?xml version='1.0' ?>
<xsl:stylesheet xmlns:xsl='http://www.w3.org/1999/XSL/Transform' version="1.0">
<xsl:template match = '/'>
<HTML>
<BODY>
Nome : <b><xsl:value-of select="//authors/@au_fname" />
</BODY>
</HTML>
</xsl:template>
</xsl:stylesheet>
|
| Quadro 1 : XSL de formatação do XML retornado pelo SQL Server |
<html> |
| Quadro 2 : Página HTML acessando o diretório virtual criado |
No quadro 2 temos um formulário HTML simples com um campo chamado SQL transmitido via GET para o endereço http://localhost/sql . Observe os detalhes :
" O endereço para onde é feita a transmissão é o endereço do diretório virtual configurado para o SQL Server.
" O nome do campo transmitido é uma variável reservada já esperada pelo ISAPI Filter que controla o diretório virtual do SQL Server.
" A transmissão GET é o tipo de transmissão esperada pelo diretório virtual do SQL Server.
" Um campo hidden guarda o nome do nó raiz que será gerado.
" Um campo hidden guarda o nome do XSL que deverá ser utilizado. Poderíamos, claro, dispensar este campo e deixar o usuário ver o resultado em XML, dependendo do caso.
Desta forma podemos digitar uma instrução SQL na caixa de texto e teremos os dados em XML como respostas. Para testar precisaremos salvar esse arquivo em um site web e chamado pelo browser, algo como :
http://localhost/quadro1.asp
A digitação na caixa de texto já é bem mais simples que via URL, veja :
select au_fname from authors for xml auto
<html> <input type=text name=txtid size=10> |
| Quadro 3 : Código HTML para acesso ao diretório virtual do SQL Server, mas este com um tratamento mais cuidadoso em JavaScript |
Já no quadro 3 foram feitas algumas alterações no código para que o usuário não precise digitar uma instrução SQL, mas apenas o id do autor para realizar a busca. O código javascript faz a montagem da instrução SQL a ser enviada ao servidor.
Observe que o código que montamos é mais do que uma simples alternativa para uma página ASP acessando banco de dados. As páginas do quadro 2 e 3 podem estar localizadas em qualquer servidor web, a comunicação com o banco de dados é feita através de transmissões HTTP usando outro servidor web como intermediário, o que faz com que o servidor web que hospeda o site possa estar localizado a distância do banco de dados ou até mesmo que o site esteja trocando dados com multiplos bancos de dados em multiplas localidades.
Em nenhum dos dois casos, porém, está sendo dado tratamento para a informação retornada, que está sendo exibida na forma de XML. No quadro 4, porém, fazemos isso em VB.
Private Sub cmdBuscar_Click() |
| Quadro 4 : Aplicação VB fazendo acesso ao diretório virtual do SQL Server |
Nesta aplicação foi feito um references para a biblioteca COM "Mcrosoft XML" (menu project->References no VB). Foi utilizado o objeto ServerXMLHTTP, que é um objeto que permite a comunicação via XML através de HTTP. Este objeto é, de certa forma, equivalente ao objeto XMLHTTP. O objeto ServerXMLHTTP, porém, é otimizado para que possa ser utilizado em um servidor, a partir de uma aplicação ASP ou um serviço instalado no servidor. O XMLHTTP, porém, possui problemas de performance o que tornam recomendável que seja usado apenas por aplicações client.
Conforme você pode observar no quadro 4 e na figura 5 com a aplicação VB foi possível fazer um tratamento mais cuidadoso da resposta fornecida pelo servidor, tanto validando a comunicação sem que o usuário veja um erro como também buscando mais informações do servidor.
Também no
quadro 4 e na figura 5 você pode observar como fica o
código de um botão "Listar" para exibir todos os autores.
A possibilidade de tratamento para a resposta não é uma exclusividade do Vb. Como pode observar, o VB está fazendo uso de componentes COM. Tais componentes podem ser utilizados em qualquer linguagem que tenha suporte ao uso de COM, tal como o próprio VBScript. No quadro 5 você pode observar o código em VBScript fazendo o mesmo tratamento para a busca por autor e em uma listagem dos autores.
A diferença mais gritante no quadro 5 é a utilização do XMLHTTP ao invés do ServerXMLHTTP, pelo fato do código estar rodando dentro do IE, ou seja, no client.
Como podem observar, porém, a query via URL não é, sem dúvida, um método seguro de acesso a dados, já que é possível manipular a instrução SQL que está sendo enviada. No próximo artigo desta série estaremos passando para o próximo passo, as querys via XPATH.
<html> Dim xHTTP,doc,root set xHTTP=createobject("MSXML2.XMLHTTP") 'Configura a comunicação, via get xHTTP.open "GET", "http://localhost/sql?sql=select+au_fname,au_lname+from+authors+where+au_id='"
& txtauid.value & "'+for+xml+auto",false Private Sub Listar() set xHTTP=createobject("MSXML2.XMLHTTP") 'Configura a comunicação, via get Set root = doc.documentElement <input type=text name=txtauid> |

Figura 5 : Tela resultante do botão "Listar" na mesma aplicação
Dennes Torres
MCSD,MCSE,MCDBA
© Búfalo Informática,
Treinamento e Consultoria -
Rua Álvaro Alvim, 37 Sala 920 - Cinelândia - Rio de Janeiro / RJ
Tel.: (21)2262-1368 (21) 9240-5134 (21) 9240-7281 e-Mail: contato@bufaloinfo.com.br