Banco de Dados - SQL Server

Criação de End Point – Web Service no SQL Server 2005

Um End Point é um serviço que pode responder nativamente por solicitações. É possível criar End Point manualmente especificando o tipo de PayLoad (origem da carga que será transportada) e o tipo de protocolo de comunicação.

por Diego Nogare



Um End Point é um serviço que pode responder nativamente por solicitações. É possível criar End Point manualmente especificando o tipo de PayLoad (origem da carga que será transportada) e o tipo de protocolo de comunicação. Com estas duas informações já é possível criar uma instância do End Point e configurar suas propriedades. Pode-se entender que um End Point é um objeto do SQL Server 2005 que representa a capacidade do SQL de se comunicar sobre a rede. Cada End Point suporta um tipo específico de comunicação.

São quatro os PayLoads compatíveis para criação de End Points: Database Mirroring, SOAP, Service Broker e Transact SQL. Contra duas opções de protocolo de transportes: HTTP e TCP.

Quando se trabalha com Database Mirroring como PayLoad, deve ser especificado o perfil de mirroring e se a encriptação estará habilitada. Já, quando o PayLoad utilizado é o Service Broker, é preciso especificar informações sobre as mensagens encaminhadas, o numero máximo de conexões permitidas e o modo de autenticação.

O protocolo HTTP pode conter uma lista de IPs restritos para acesso, tipo de autenticação da porta, caminho do website e modo de autenticação. Para trabalhar com TCP é requerido uma lista de IPs para acesso e a porta de comunicação.

Depois de criado e configurado completamente o End Point, os acessos podem ser garantidos, ou negados para Usuários, Grupos, Perfis e/ou Logons. Somente usuários que tenham perfis de acessos compatível com SA (SysAdmin) podem criar, alterar ou apagar um End Point.

A sintaxe de criação do End Point, pode ser separada em dois grupos lógicos. O primeiro grupo, provê informações específicas sobre o protocolo de comunicação, informa qual tipo de acesso, o método de autenticação e caso queira, uma lista de IPs que estão restritos ao acesso. Já no segundo grupo é configurada a forma de origem dos dados, solicitações AD-HOC, retorno do Schema XSD, Namespace.

No exemplo deste artigo, será utilizado o banco AdventureWorks, que vêm como banco de exemplo do SQL Server 2005. Será criada uma Stored Procedure que retornará algumas informações, e a utilizaremos como sendo a carga de informações.

A Stored Procedure fará uma junção de dados de quatro tabelas: Contact, Individual, Customer e SalesTerritory. Ela mostrará o Nome, Sobrenome e a Cidade dos contatos que tem o primeiro nome e sobrenome que começam com a letra "A".

CREATE PROCEDURE ContatoTerritorio AS

SELECT Con.FirstName, Con.LastName, Sal.Name

FROM Person.Contact Con INNER JOIN Sales.Individual Ind

ON Con.ContactID = Ind.ContactID

INNER JOIN Sales.Customer Cus

ON Ind.CustomerID = Cus.CustomerID

INNER JOIN Sales.SalesTerritory Sal

ON Cus.TerritoryID = Sal.TerritoryID

WHERE Con.FirstName LIKE "A%" AND

Con.LastName LIKE "A%"

É possível visualizar esta Stored Procedure criada, acessando a parte de Programmability e em seguida, nas opções que se expandiram, Stored Procedures.

Após a criação da Stored Procedure, vamos criar agora o End Point, utilizando protocolo HTTP e PayLoad SOAP.

CREATE ENDPOINT epContatoTerritorio

STATE = STARTED

AS HTTP (

PATH ="/SQL/contatoTerritorio",

AUTHENTICATION=(integrated),

PORTS=(clear)

)

FOR SOAP (

WEBMETHOD "retornaContatoTerritorio"

(

NAME="AdventureWorks.dbo.contatoTerritorio",

SCHEMA=standard,

FORMAT=rowsets_only),

WSDL=default,

BATCHES=enabled

)

Entendendo as linhas do código de criação do End Point acima.

Algumas variações para criação do End Point podem acontecer, como por exemplo o estado inicial, o tipo de protocolo de comunicação, o tipo de autenticação, e outras propriedades que foram configuradas no nosso exemplo. Abaixo é apresentada uma tabela, agora com algumas opções de variações dos valores das propriedades.

Após a criação do End Point, é possível localizá-los dentro do SQL Server Management Studio, e dentro do SQL Server 2005 Surface Area Configuration. Primeiro vamos localizar o End Point no SQL Server Management Studio.

Primeiro devemos expandir a sessão de Server Objects, depois escolher o tipo de objeto que estamos procurando, neste caso, Endpoints. Depois de surgirem as opções dos Endpoints, procure o tipo do PayLoad utilizado, no caso do exemplo SOAP. Lá estarão todos os objetos End Points criados com PayLoad SOAP.

Para localizar os End Points através do SQL Server 2005 Surface Area Configuration, devemos abrir a ferramenta e em seguida abrir a parte de Surface Area Configuration for Features localizada na parte inferior da tela. Na nova janela que se abriu, expanda a sessão do Database Engine, e em seguida procure nas opções exibidas no menu da esquerda por Native XML Web Services. Todos os End Points criados estarão no lado direito da tela, independente de qual foi o PayLoad utilizado para a criação.

Após a criação do End Point, vamos consumir os dados que foram disponibilizados na Stored Procedure. Para consumir estes dados, criaremos duas aplicações. Uma em WebForms e outra em WinForms. A escolha destas duas formas é para demonstrar que o End Point provê retorno para qualquer tipo de solicitação. Criando uma aplicação WebForms

Para consumir os dados gerados pelo End Point, trabalharemos como se fosse um acesso à um Web Service. É assim que o End Point é tratado dentro do SQL Server 2005. Primeiro passo é abrir o Visual Studio 2005, e criar um novo Web Site.

Uma tela aparecerá solicitando o tipo de projeto Web que será trabalhado, o nome e local de armazenamento do projeto e a linguagem que será trabalhada. Escolha um nome, um local e uma linguagem. Neste exemplo utilizarei a linguagem C#, no exemplo com a aplicação WinForms, utilizarei VB .NET para agradar a todos os gostos.

Após criar o projeto de ASP.NET Web Site, o Visual Studio já cria a página Default.aspx automaticamente. Vamos apontar para a Solution Explorer e adicionar uma referência web.

Uma tela será exibida, para preenchimento do local de origem do Web Service. No campo URL, repare que estou apontando exatamente para o local estipulado na propriedade path hora da criação do End Point dentro do SQL Server 2005. Depois de preencher o campo URL, clique no botão Go. Se o Visual Studio encontrar o Web Service no caminho que foi informado, os nomes dos webMethods serão apresentados no bloco que está a direita da tela, e o cabeçlho WSDL será apresentado logo abaixo da URL digitada. Para referenciar um Web Service, devemos especificar um nome para ter acesso de dentro da aplicação. Este nome é colocado na caixa Web reference name. No exemplo que estamos montando, coloquei o nome de EndPoint. Clique em Add reference.

Repare que agora, na Solution Explorer, existe uma pasta com a WebReference que criamos.

Vamos arrastar para a tela, os controles que utilizaremos para visualizar os dados de retorno da Stored Procedure. Coloquei um botão (Button) e uma Grid (gridView). Para deixar a Grid colorida, deixe o mouse parado em cima da grid, uma seta aparecerá no canto superior direito, clique na seta e vá até Auto Format, escolha um dos modelos, e clique em OK.

Vamos agora, clicar duas vezes no botão que criamos, e codificar a chamada ao Web Service.

protected void Button1_Click(object sender, EventArgs e)

{

//Criação de um objeto do Web Service

EndPoint.epContatoTerritorio wsAcesso = new EndPoint.epContatoTerritorio();

//Especificação da credencial, para autenticação

wsAcesso.Credentials = System.Net.CredentialCache.DefaultCredentials;

//Criação de um DataSet que receberá os dados

DataSet dados = new DataSet();

//Configuração do retorno do WebService para dentro do DataSet criado

dados = wsAcesso.retornaContatoTerritorio();

//Especificação de qual dado será populado na grid

GridView1.DataSource = dados;

GridView1.DataBind();

}

Executando a aplicação, e visualizando no navegador, temos uma tela somente com o botão Carregar. Ao clicar no botão, os dados do End Point serão apresentados na Grid, como programamos.

Criando uma aplicação WinForms

Para criar um projeto WinForms, abra o Visual Studio, vá ao menu File e aponte para New Project.

A configuração da tela de projetos possui algumas informações semelhantes às da tela de criação de WebSites. Preencha a tela, e clique no botão OK.

Um formulário vazio será criado, e adicionado na Solution Explorer. Para acessarmos o Web Service criado no SQL Server 2005, repita os passos que fizemos para adicionar a Web Reference na aplicação Web.

Da mesma forma que fizemos no formulário Web, vamos fazer agora, os mesmos procedimentos para montar a tela que receberá os dados. A única diferença será a Grid, pois não trabalharemos com a GridView, e sim com a DataGridView.

A tela ficará com uma aparência, parecida com esta.

Vamos agora, codificar os dados no botão Carregar. Clique duas vezes sobre o botão e digite o código abaixo:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

"Criação de um objeto do Web Service

Dim wsAcesso As New EndPoint.epContatoTerritorio

"Especificação da credencial, para autenticação

wsAcesso.Credentials = System.Net.CredentialCache.DefaultCredentials

"Criação de um DataSet que receberá os dados

Dim dados As New DataSet

"Configuração do retorno do WebService para dentro do DataSet criado

dados = wsAcesso.retornaContatoTerritorio

"Especificação de qual dado será populado na grid

DataGridView1.DataSource = dados.Tables(0)

End Sub

Executando a aplicação, é possível visualizar a tela como montamos, sem nenhum dado na Grid. Após clicar no botão Carregar, os dados do End Point serão colocados na Grid, da mesma forma que foi colocado na Grid da aplicação web.

O End Point do SQL Server 2005 funciona como um Web Service. Por isso a necessidade de consumi-lo como tal. O End Point trafega a informação em formato XML, e necessita do SQL Native instalado no servidor que terá o End Point. O End Point pode ser consumido de uma aplicação .NET, Delphi, Java. Tanto em ambientes Windows, Web, Linux, Mobile. A única restrição, é o consumidor ter acesso ao Web Service.

Até o próximo artigo.

Diego Nogare

Diego Nogare - Graduado em Ciência da Computação e Pós-Graduado em Engenharia de Computação com ênfase em Desenvolvimento Web com .NET, Colaborador do Portal Linha de Código, co-Líder do grupo de usuários Codificando .NET, co-Líder dos Microsoft Student Partners [MSP] de São Paulo e Microsoft Most Valuable Professional [MVP] em SQL Server, possui certificações MCP e MCTS em SQL Server 2005, é palestrante em eventos da Microsoft, Codificando .NET e INETA BR, mantém o site: www.diegonogare.net.