Translate this page now :



»Programação
»Programação.NET
»Banco de Dados
»Webdesign
»Office
» Certificações Microsoft 4
»Treinamentos4
»Programação 4
»Webdesign«
»Office & User Tips«
»Grupos de Usuários
»Células Acadêmicas«
intcontpiada : 118
Evoluindo
Você já está cadastrado e participa do grupo de usuários de sua cidade ? Se não, comente o porque.
 
 
Faça um pequeno teste com 10 questões de VB
.:.
Teste seus conhecimentos em Visual Basic, SQL Server e ASP 3.0 com nossas provas on-line
.:.
Aprimore seus conhecimentos em programação com nosso treinamento on-line de lógica de programação
.:.
Veja nosso calendário de treinamentos
Gostou da Página?
Então

para um amigo!
 







Pesquisa personalizada
Pesquisar Dicas:

 






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 Parte IV
Criando WebServices


Você também gostará de ler os seguintes artigos
Trocando dados em XML com SQL Server Parte I
Trocando dados em XML com SQL Server Parte II - XPATH
Trocando dados em XML com SQL Server Parte III - Templates
Após este arquivo você gostará de estudar :

SQL Server

XML


Os recursos do SQL Server para suporte a XML evoluem mais rápido do que o próprio servidor de banco, por isso a Microsoft tem distribuido um pacote de software chamado SQLXML que faz a atualização destes recursos.

Na versão 3.0 o SQLXML passou a incluir recursos para geração de WebServices diretamente a partir de objetos do servidor, o que aumentou consideravelmente a facilidade de exposição de informações na web, especialmente considerando a facilidade do VB.NET de acessar dados de web services.

Para possibilitar isso o SQLXML 3.0 possibilita a criação de um novo tipo de virtual name, que é o virtual name do tipo SOAP.

Um WebService precisa de um arquivo para descreve-lo, um arquivo em formato WSDL (Web-Service Description Language) esse arquivo é criado e corrigido automaticamente pelo SQLXML conforme realizamos a configuração do virtual name, determinando quais objetos serão publicados.

Nos artigos anteriores sobre SQLXML vimos como fazer a configuração do virtual directory e dos outros tipos de virtual name, portanto vamos partir da criação de um virtual name do tipo soap e demonstrar como fazer utilização deste recurso.

Primeiramente com a opção <new virtual name> selecionada devemos digitar o nome do virtual name (vamos utilizar soap), selecionar seu tipo, criar um nome para o Web Service (algo bem criativo, como soap) e clicar no botão save.

A partir dai temos 3 botões disponíveis : Edit, Delete e Configure. O botão Edit permite alterar as informações acima, o botão Delete permite eliminar o virtual name, enquanto que o botão Configure permite configurar o virtual name, neste caso determinando o que será publicado pelo serviço, portanto vamos analisar em detalhes essa tela.

Um WebService é formado por métodos que podem receber parâmetros e devolver informações para o client. Então devemos fazer o mapeamento de objetos do banco de dados com métodos ficticios, que quando chamados causarão o disparo destes objetos de banco, causando a devolução de informações para o client.

Como pode observar pela tela de configuração, podemos ter dois tipos de métodos para nosso webService : Métodos baseados em procedures e métodos baseados em templates.

Vamos começar criando um método baseado em uma procedure. Vamos dar nome ao método, vamos chama-lo de Clientes. Em seguida clicamos no botão com "..." para selecionarmos a procedure que ele irá disparar.

Vamos utilizar uma procedure muito simples, veja :

create procedure Clientes As
select * from customers


Devemos definir também o formato de OutPut, que pode ser :

XML Objects : Cada conjunto de dados se transforma em um objeto XML

DataSets : Cada conjunto de dados se transforma em um DataSet

Single DataSet : Todos os conjuntos de dados devolvidos pelo serviço são unidos em um único Data Set.

Vamos utilizar a opção single DataSet, a mais simples e adequada ao nosso exemplo. Em seguida utilizamos Save para o método e Ok e Ok novamente nas duas telas. Agora vamos demonstrar um acesso simples ao serviço que criamos utilizando o VB.NET.

Vamos acessar o Visual Studio .NET e criar um novo projeto, uma Windows Application.

Clicando com o botão direito na Windows Application devemos selecionar a opção "Add Web Reference". Isso é, de certa forma, ao project->References do VB 6, mas neste caso trata-se de estarmos adicionando uma referência a um serviço na web.

Em nosso exemplo o serviço encontra-se na mesma máquina em que estamos fazendo o teste, portanto o endereço que utilizaremos será http://localhost/sql/soap?wsdl . Como resposta o SQLXML devolve o arquivo WSDL referente ao virtual name que criamos. Então o botão Add Reference se torna disponível para que possamos adicionar a referência ao web service.

A referência ao objeto em código será feita pelo nome da pasta, que assume automaticamente o nome do servidor. Podemos alterar isso pela janela de propriedades, trocando Localhost por North para facilitar a montagem do código.

O nome North se torna como um namespace para o sistema. Podemos então inserir um DataGrid e um botão no formulário. Precisaremos de uma variável do tipo DataSet para recebermos as informações e atribuirmos a tabela na variável. Veja como fica o código :

 Dim ds As DataSet

   Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)    Handles Button1.Click
	   'Define uma variável do tipo north.soap (observe a substituição do nome do servidor, mas como o virtual name continua o mesmo)
	   Dim x As New North.soap()

	   'Uma variável para guardar o status de execução
	   Dim y As Integer
	 'A chamada do serviço    e o retorno do dataset. A chamada aqui pode estar acontecendo via internet,    usando HTTP e XML, mas isso fica totalmente transparente para o programador
	   ds = x.Clientes(y)
	 'Atribuição    do DataSet na grid
	   DataGrid1.DataSource = ds.Tables(0).DefaultView
 End Sub

Neste exemplo fizemos acesso a uma procedure sem parâmetros, mas poderíamos perfeitamente acessar uma procedure que necessitasse receber parâmetros, veja :

Create procedure Clientes @country varchar(10) As
select customerid,companyname from customers where country=@country


Ao fazer uma alteração no serviço oferecido pelo servidor é necessário que o VB.NET faça um novo reconhecimento do serviço, por isso na janela Server Explorer somos obrigados a clicar com o botào direito no serviço North e selecionar a instrução "Update Web Reference" para que o VB.NET leia novamente o arquivo WSDL do servidor.

A alteração de código no VB.NET é bem simples :

 Dim ds As DataSet
 Private Sub Button1_Click(ByVal    sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
   Dim x As New North.soap()
   Dim y As Integer
 ds = x.Clientes("Brazil",    y)
   DataGrid1.DataSource = ds.Tables(0).DefaultView()
 End Sub

O próprio VB.NET, tendo reconhecido os parâmetros necessários ao serviço, irá auxiliar na montagem da linha de chamada ao método Clientes.

 

O próximo passo agora é chamarmos uma procedure que retorne mais de um resultset. Como Observamos na configuração do serviço, neste caso os vários resultsets podem ser unidos em um único DataSet ou podem ser retornados como um vetor de DataSets. Vamos experimentar as duas opções, mas o primeiro passo será alterar a procedure para que ela retorne mais de um resultset. Vamos fazer com que além de retornar a lista de clientes seja retornada também a lista de compras que esses clientes fizeram. Veja a procedure :

Create procedure Clientes    @country varchar(10) As
   select customerid,companyname from customers where country=@country
   select * from orders where customerid in (select customerid from customers where    country=@country)

Vamos alterar a configuração do serviço para devolver um vetor de recordsets. A própria Microsof recomenda que multiplos recordsets sejam devolvidos desta forma, pois ao receber os múltiplos recordsets o ADO.NET pode analisa-los e, conforme alguns critérios, uni-los em uma única tabela ao invés de várias. Precisamos também alterar a interface gráfica, vamos agora utilizar dois DataGrids ao invés de um.

Veja como fica o código do VB.NET para receber estes resultsets :

 Dim ds As Object
 Private Sub Button1_Click(ByVal    sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
   Dim x As New North.soap()
 ds = x.Clientes("Brazil")
 DataGrid1.DataSource =    ds(0).Tables(0).DefaultView()
   DataGrid2.DataSource = ds(1).Tables(0).DefaultView()
 End Sub

Observe que neste exemplo não precisamos mais da variável Y para obter códigos de erro do SOAP, pois os códigos de erros são devolvidos como um DataSet adicional.

Com esses exemplos vimos que expor informações contidas no SQL Server através da Web para aplicações client .NET é bem mais simples do que pode inicialmente parecer. Vale mencionar que o serviço criado pelo SQLXML também pode ser acessado via VB 6, desde que se faça uso do soap toolkit para o VB 6, que a Microsoft distribui gratuitamente.

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