WCF - Consumindo um serviço com dados no SQL Server (VB.NET)
Este artigo apresenta como consumir um serviço que consulta dados no SQL Server 2008 usando a linguagem VB .NET.
Para consultar dados em um banco de dados SQL Server usando um serviço WCF, devemos fazer realizar as seguintes ações:
Na primeira etapa, vamos utilizar um banco de dados existente no SQL Server, depois disso criamos uma função simples para consultar dados no banco de dados usando um serviço WCF.
A seguir criaremos uma aplicação web onde vamos incluir uma referência ao serviço e aos dados a serem consultados e exibidos em um controle gridivew.
A aplicação exemplo foi desenvolvida no Visual Web Developer 2010 Express(VWD 2010) e no SQL Server 2008.
A tecnologia WCF - Windows Communication Foundation, surgiu com a .NET Framework 3.0 com o objetivo de unificar as até então existentes tecnologias de programação distribuídas como: COM+ , MSMQ-Message Queue, Enterprise Services, .NET Remoting e Web Services.
Com o advento da WCF foi criada uma plataforma com uma API que facilitou de forma considerável o desenvolvimento de aplicações distribuídas visto que o WCF não esta acoplado as regras de negócio que deverão ser expostas pelo serviço.
Para iniciar com o WCF existem alguns conceitos básicos que você deve conhecer para projetar, implementar e hospedar os seus serviços. Na verdade os templates WCF fornecidos no Visual Studio simplificam muito este processo visto que eles fornecem um serviço modelo que pode ser imediatamente hospedado e testado com as ferramentas de teste WCF. Assim chamar um serviço WCF a partir de um cliente é também uma tarefa simples , basta gerar um proxy e escrever o código contra o seu modelo de objetos.
O banco de dados e a tabela
Usaremos o banco de dados chamado Escola e a tabela Usuarios cuja estrutura e dados são exibidas abaixo:
Criando o serviço WCF
A seguir crie o projeto WCF usando o VWD 2010 com o nome WcfService_GDV_VB;
Abra o VWD 2010 Express e no menu File clique em New Project;
Selecione a linguagem C# e o template WCF e a seguir WCF Service Application;
Informe o nome WcfService_InserirDados_SQLServer e clique em OK;
Será criado um projeto com a estrutura abaixo mostrada na janela Solution Explorer:
Vamos definir o contrato e o contrato de dados na interface IService conforme o código a seguir:
Lembre-se que a interface define apenas as assinaturas dos métodos que deverão ser implementados por uma classe concreta;
uImports System.Runtime.Serialization Imports System.ServiceModel Imports System.Data Namespace WcfService_GDV <ServiceContract()> _ Public Interface IService1 <OperationContract()> _ Function GetUsuarios() As Usuario End Interface <DataContract()> _ Public Class Usuario <DataMember()> _ Public Property tabelaUsuario() As DataTable Get Return m_tabelaUsuario End Get Set(ByVal value As DataTable) m_tabelaUsuario = Value End Set End Property Private m_tabelaUsuario As DataTable End Class End Namespace |
A primeira etapa para
criar um serviço WCF e efetuar a definição do
contrato pois é
o contrato Obs: O contrato é uma interface que
contém as assinaturas dos métodos que serão expostos. Contratos
de serviços (Service Contracts) - Descrevem as operações que um
serviço pode Contratos de Dados (Data
Contracts) -
Descreve a estrutura de dados usada no serviço. Um Data
Contract especifica para cada parâmetro ou tipo de
retorno qual informação será Definimos o contrato de serviço: GetUsuarios e o contrato de dados Usuario. Neste processo realizamos as seguintes tarefas:
|
Agora vamos implementar o método GetUsuarios na classe Service1 no arquivo code-behind Service.svc digitando o código conforme abaixo:
Imports System.Configuration Imports System.Data.SqlClient Imports System.Data Namespace WcfService_GDV Public Class Service1 Implements IService1 Private conString As String = ConfigurationManager.ConnectionStrings("conexaoSQL").ConnectionString Private con As SqlConnection Private cmd As SqlCommand Private da As SqlDataAdapter Private dt As DataTable Private usuario As New Usuario() Public Function GetUsuarios() As Usuario Implements IService1.GetUsuarios Using con = New SqlConnection(conString) cmd = New SqlCommand("Select top 10 * from Usuarios", con) da = New SqlDataAdapter(cmd) dt = New DataTable("Paging") da.Fill(dt) usuario.tabelaUsuario = dt Return usuario End Using End Function End Class End Namespace |
Observe que estamos referenciando o namespace System.Configuration; para isso temos que incluir uma referência no projeto web via menu Project -> Add Reference;
Selecionando em seguida a guia .NET e o item System.Configuration:
Não podemos esquecer de definir a string de conexão com o banco de dados no arquivo web.config conforme abaixo:
<?xml version="1.0"?> <configuration> <connectionStrings> <add name="conexaoSQL" connectionString="Data Source=.\SQLEXPRESS;Initial Catalog=Escola;Integrated Security=True;" /> </connectionStrings> <system.web> ..... |
Aora pressione F5 para executar o serviço. Um formulário WCF Test Client será exibido e vai executar o serviço.
Teremos a exibição do serviço e do método GetUsuarios() definido:
Após isso o serviço foi adicionado com êxito.
Vamos agora abrir o serviço no navegador, para isso com o botão direito do mouse clique sobre o arquivo service1.vcs e a seguir em View in Browser;
Copie a URL : http://localhost:61404/Service1.svc (no seu exemplo provavelmente a porta será diferente) para usá-la mais adiante.
Criando a aplicação WEB
Vamos criar a aplicação WEB que irá consumir o serviço WCF criado.
No menu File clique em Add -> New Project selecine o template ASP .NET Web Application e informe o nome ConsultarDadosWeb;
Vamos incluir no projeto web a referência ao serviço WCF.
Clique com o botão direito do mouse sobre o Projeto Web e selecione o item Add Service Reference...
Será aberta a janela mostrada abaixo:
Vamos colar URL que copiamos quando abrimos o serviço no navegador na caixa de texto Address e clicar no botão Go:
Deveremos ver o serviço criado e na área Operations o método GetUsuarios do serviço;
Clique no botão OK para incluir a referência no projeto:
Agora abra a página Default.aspx e inclua um controle GridView a partir da ToolBox;
A seguir, no evento Load da página, inclua o código abaixo que irá instanciar o serviço criado e usar o método exposto para inserir dados no SQL Server;
Public Class _Default Inherits System.Web.UI.Page Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load Dim servico As New ServiceReference1.Service1Client() Dim _usuario As New ServiceReference1.Usuario() _usuario = servico.GetUsuarios() Dim dt As New DataTable() dt = _usuario.tabelaUsuario GridView1.DataSource = dt.DefaultView GridView1.DataBind() End Sub End Class |
Obtemos os dados do formulário e após criar uma instância do serviço usamos o método GetUsuarios para obter as informações da tabela e exibir o resultado no controle GridView:
Execute a aplicação e a tela abaixo será apresentada:
Vimos assim como é simples usar os recursos do WCF para obter informações no SQL Server.
Em outro artigo irei mostrar como realizar as operações CRUD usando um serviço WCF.
Aguarde : WCF - Inserindo dados no SQL Server
Pegue o projeto completo aqui: WcfService_GDV_VB.zip
Joã 3:31
Aquele que vem de cima é sobre todos; aquele que vem da terra é da terra, e fala da terra. Aquele que vem do céu é sobre todos.Joã 3:32
Aquilo que ele tem visto e ouvido, isso testifica; e ninguém aceita o seu testemunho.Joã 3:33
Mas o que aceitar o seu testemunho, esse confirma que Deus é verdadeiro.Joã 3:34
Pois aquele que Deus enviou fala as palavras de Deus; porque Deus não dá o Espírito por medida.Joã 3:35
O Pai ama ao Filho, e todas as coisas entregou nas suas mãos.Joã 3:36
Quem crê no Filho tem a vida eterna; o que, porém, desobedece ao Filho não verá a vida, mas sobre ele permanece a ira de Deus.Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#