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 NogareSã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.
Código End Point |
Significado |
CREATE ENDPOINT epContatoTerritorio |
Nome do objeto End Point |
STATE = STARTED |
Estado inicial de criação |
AS HTTP |
Tipo de protocolo de comunicação |
PATH ="/SQL/contatoTerritorio" |
Caminho para acesso |
AUTHENTICATION=(integrated) |
Tipo de autenticação |
PORTS=(clear) |
Tipo de ouvinte dos dados |
FOR SOAP |
Origem da carga de dados |
WEBMETHOD "retornaContatoTerritorio" |
Nome do webMethod |
NAME="AdventureWorks.dbo.contatoTerritorio" |
Nome da Stored Procedure |
SCHEMA=standard |
Como será o Schema XML |
FORMAT=rowsets_only |
Formato de retorno da consulta |
WSDL=default |
Como será o cabeçalho do WebService |
BATCHES=enabled |
Possibilidade de consultas AD-HOC |
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.
Código End Point |
Variação |
State |
Stopped, Started, Disabled |
AS |
HTTP, TCP |
FOR |
soap, tsql, service_broker, database_mirroring |
Authentication |
basic, digest, integrated, ntlm, Kerberos |
Ports |
Clear, SSL |
Schema |
None, Standard, Default |
Format |
All_Results, Rowsets_only |
Batches |
Enabled, Disabled |
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 SubExecutando 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.
- Representando dados em XML no SQL ServerSQL Server
- Diferenças entre SEQUENCES x IDENTITY no Microsoft SQL Server 2012SQL
- Utilizando FILETABLE no SQL Server 2012SQL Server
- NHibernate com o Delphi Prism: Acessando um Banco de Dados SQL ServerVisual Studio
- Novidades no SQL Server Codinome DenaliSQL Server