Revista Active Delphi
quinta-feira, 2 de setembro de 2010
Busca  
Porta 80 Web Hosting
 :: Acessibilidade
Ir para conteúdo principal: ALT + 1
 :: Participe
Seja um autor de CD/DVD de Treinamento
Publique um artigo
Publique uma oportunidade
Publique uma notícia
Publique um curso
Publique uma dica
Publique um código
 :: Informativo
Receba nossos informativos por e-mail.
E-mail:   
 
Digite a palavra abaixo:  
 
 
 :: Oportunidades
Cadastrar oportunidades
Gerenciar suas oportunidades
Cadastrar nova empresa
 :: Especiais
Básico de C++
C++ Builder
Curso ASP.NET 3.5 em VB.NET e C#
Guia Prático de HTML
Testes com Visual Studio Team System 2008
 :: Desenvolvimento
ActionScript
ADO.NET
ASP
ASP.NET
Automação Comercial
C#
C/C++
Coldfusion
CSS
Delphi
Disp. Móveis
HTML
Java
Javascript
LSL (Second Life)
Modelagem
PHP
Python
Sharepoint
Silverlight
SQL
VBA (Office)
Visual Basic
Visual Basic .NET
Visual Fox Pro
WCF/WPF
Web Services
XML
 :: Infra
BizTalk Server
CRM
Exchange Server
ForeFront / Antigen / IAG
Interoperabilidade
ISA Server
Linux
MOF
MS Dynamics CRM
Network
OCS / LCS
Outlook
Powershell e Scripts
Redes
Segurança
System Center e Gerenciamento
Virtualização
Windows
Windows Server
 :: Banco de Dados
Access
Caché
Firebird
Interbase
MySQL
Oracle
SQL Server
Sybase
 :: Gerência
Arquitetura
Ciclo de Vida de Desenvolvimento
Controle de Versão
Estimativas
Metodologias
MOF
Qualidade e Testes
 :: Design
Corel
Flash
Photopaint
Photoshop
 :: Livros
Análise Sistemas
Aplicativos
Banco de Dados
Certificação
Design e CAD
Gerência
Hardware
Internet
Programação
Programação Web
Rede
Segurança
Servidores
Sistemas Operacionais
 :: CDs/DVDs
Desenvolvimento
Infra
Design
 :: E-Books
.NET 2.0 (VS 2005)
.NET 1.1 (VS 2003)
SQL Server
Excel 2007
Excel 2003
Access 2003
ASP 3.0
Delphi
Java
Artigos


MVP Profile
WCF - Introdução
Por: Israel Aéce
[Entre em contato com o autor ]
Especialista em tecnologias de desenvolvimento Microsoft, atua como desenvolvedor de aplicações para o mercado financeiro utilizando a plataforma .NET. Como instrutor Microsoft, leciona sobre o desenvolvimento de aplicações .NET. É palestrante em diversos eventos Microsoft no Brasil e autor de diversos artigos que podem ser lidos a partir de seu site http://www.israelaece.com/. Possui as seguintes credenciais: MVP (Connected System Developer), MCP, MCAD, MCTS (Web, Windows, Distributed, ASP.NET 3.5, ADO.NET 3.5, Windows Forms 3.5 e WCF), MCPD (Web, Windows, Enterprise, ASP.NET 3.5 e Windows 3.5) e MCT.
Feed de artigos.
Feed de artigos deste autor.
Gere seu feed personalizado  
O que você fará com o Visual Studio 2010?

WCF - Introdução
Publicado em: 18/05/2009

Faça o download do arquivo.

A Microsoft disponibiliza várias tecnologias para o desenvolvimento de aplicações distribuídas. Cada uma delas é voltada para uma necessidade específica, e entre essas tecnologias temos: ASP.NET Web Services, WSE - Web Services Enhancements, .NET Remoting, COM+ - Enterprise Services e MSMQ - Message Queue. Cada uma delas possui sua própria API, com vários tipos que devem ser estudados para que possamos desenvolver uma aplicação que exponha ou consuma recursos destas tecnologias.

Quando iniciou a criação do .NET Framework 3.0, um entre quatro dos grandes pilares que havia dentro dele era o Indigo que mais tarde recebeu o nome de Windows Communication Foundation, ou simplesmente WCF. O WCF unificou as várias tecnologias de programação distribuídas na plataforma Microsoft em um único modelo, baseando-se na arquitetura orientada à serviços (SOA). Essa nova API facilita consideravelmente o aprendizado e desenvolvimento, já que o WCF está totalmente desacoplado das regras de negócios que serão expostas pelo serviço. A finalidade deste artigo é mostrar uma introdução ao WCF, construindo passo-à-passo um exemplo simples de como criar e consumir um serviço.

Para começar a fazer uso do WCF, tudo o que precisamos é referenciar em nossa aplicação o assembly System.ServiceModel.dll. Esse assembly possui a maioria dos tipos necessários para a construção de um serviço ou de um cliente. Ainda há outros assemblies que complementam o WCF, como é o caso do suporte à serviços baseados em REST, mas que serão abordados em artigos específicos.

Estrutura

A estrutura de um serviço WCF não é muito complexa, pois devemos utilizar conceitos puros de programação .NET para a criação do contrato e da classe que representará o serviço. Além disso, o WCF também suporta a utilização de tipos complexos, como classes que criamos para atender uma determinada necessidade.

O primeiro passo na criação do serviço é a definição do contrato. É o contrato que determinará quais operações estarão expostas, quais informações essas operações necessitam para ser executadas e também qual será o tipo de retorno. O contrato nada mais é que uma Interface que, por sua vez, deverá possuir os métodos (apenas a sua assinatura) que serão expostos. A Interface que servirá como contrato deverá ser obrigatoriamente decorada com o atributo ServiceContractAttribute pois, caso contrário, uma exceção do tipo InvalidOperationException será disparada antes da abertura do host.

Nem sempre todos os membros expostos pela Interface devem ser expostos para o serviço e, justamente por isso, todas as operações que serão disponibilizadas devem ser decoradas com o atributo OperationContractAttribute. Vale lembrar que o WCF obriga a termos no mínimo uma operação definida com este atributo, já que não faz sentido publicar um serviço que não tenha nenhuma operação a ser executada. Caso a Interface não possua nenhuma operação definida com este atributo, uma exceção do tipo InvalidOperationException também será disparada antes da abertura do host. O código abaixo exibe uma Interface simples, que servirá como exemplo para o artigo:

using System;
using System.ServiceModel;

[ServiceContract]
public interface IContrato
{
    [OperationContract]
    Usuario RecuperarUsuario(string nome);
}
C# VB.NET  

Para fins de exemplo, esta Interface apenas terá um único membro, mas ela poderá conter vários outros e, como já dito acima, você controla a visibilidade destes membros através do atributo OperationContractAttribute. Como podemos notar, o método RecuperarUsuario retorna uma instância da classe Usuario. Neste momento dois novos atributos entram em cena: DataContractAttribute e DataMemberAttribute, ambos contidos no namespace System.Runtime.Serialization, fornecido pelo assembly System.Runtime.Serialization.dll.

Os data contracts são uma forma que se tem de publicar possíveis estruturas de dados que podem ser trocadas durante o envio e recebimento de uma mensagem. A utilização do atributo DataContractAttribute determina que uma classe poderá ser exposta através de um serviço WCF, e deve ser aplicado a todas as classes que estão referenciadas, como parâmetro ou tipo de retorno, em um contrato (Interface). Já os tipos primitivos, como String, DateTime, Int32, não precisam disso, já que podem ser serializados diretamente.

Já o atributo DataMemberAttribute deve ser aplicado nos campos e propriedades que o tipo possui e que devem ser expostos através do serviço. Esse atributo irá controlar a visibilidade do campo ou da propriedade para os clientes que consomem o serviço, não importando o modificador de acesso (public, private, etc.) que possui. O código abaixo define a classe Usuario:

using System;
using System.Runtime.Serialization;

[DataContract] //Opcional com .NET 3.5 + SP1
public class Usuario
{
    [DataMember] //Opcional com .NET 3.5 + SP1
    public string Nome { get; set; }
}
C# VB.NET  

Observação: A partir do Service Pack 1 do .NET Framework 3.5 esse comportamento foi mudado. Visando o suporte ao POCO (Plain Old C# Objects), a Microsoft tornou mais flexível a utilização de data contracts em serviços WCF, não obrigando às classes, propriedades e campos serem decorados com os atributos acima citados. Com isso, apenas propriedades do tipo escrita/leitura serão serializadas. A partir do momento que você decora a classe com o atributo DataContractAttribute, você também deverá especificar, via DataMemberAttribute, quais campos deverão ser serializados.

Vale lembrar também que o atributo XmlSerializableAttribute (namespace System.Xml.Serialization) e as Interfaces IXmlSerializable (namespace System.Xml.Serialization) e ISerializable (namespace System.Runtime.Serialization) também continuam sendo suportadas, permitindo que você customize como o objeto será serializados/deserializados pelo WCF ou qualquer outro recurso fornecido .NET Framework.

Uma vez que o contrato do serviço esteja definido e os possíveis tipos que ele expõe também estejam devidamente configurados, o próximo passo é a criação da classe que representa o serviço. Esta classe deverá implementar todos os membros expostos pela Interface que define o contrato do serviço, inclusive aqueles que não estão marcados com o atributo OperationContractAttribute, lembrando que a implementação de uma Interface em uma classe é uma imposição da linguagem, e não do WCF.

A implementação dos métodos poderá conter a própria regra de negócio, bem como pode servir de wrapper para algum outro componente ou serviço. Além disso, as classes que representam o serviço também podem configurar alguns outros recursos fornecidos pelo WCF e que estão acessíveis através de behaviors, como por exemplo: transações, sessões, segurança, etc., mas veremos isso mais detalhadamente abaixo. O WCF desacopla totalmente a regra do negócio de sua API e, justamente por isso, que é possível notar no código abaixo que a classe que representa o serviço não possui nenhuma configuração do WCF:

using System;

public class Servico : IContrato
{
    public Usuario RecuperarUsuario(string nome)
    {
        return new Usuario() { Nome = nome };
    }
}
C# VB.NET  

Por si só esta classe não trabalha, pois deverá ser consumida pelo WCF. Mas afinal, como se determina que é esta classe responsável por atender as requisições? Isso é realizado através do host, ou melhor, da classe ServiceHost. Logo no construtor desta classe, você deverá passar uma instância da classe Type, apontando para a classe que representa o serviço e, obrigatoriamente, deverá implementar todos os possíveis contratos que são expostos através dos endpoints. A configuração do host para este exemplo será abordada na seção seguinte.

Grande parte dos atributos que vimos nesta seção disponibilizam várias propriedades que nos permitem interagir com o serializador/deserializador da mensagem e, além disso, permitem especificarmos algumas regras que serão validadas antes da abertura do host e, caso não sejam atendidas, uma exceção será disparada. Como essas propriedades influenciam nas mais variadas funcionalidades expostas pelo WCF, elas serão detalhadamente abordadas nos artigos que correspondem à sua utilização. Para conhecer os artigos disponíveis, consulte a listagem na seção Explorando outras Funcionalidades.

Hosting

Uma das grandiosidades do WCF é a possibilidade de utilizar qualquer tipo de aplicação como host, ou seja, ele não tem uma dependência de algum software, como o IIS (Internet Information Services), como acontecia com os ASP.NET Web Services. O WCF pode expor serviços para serem acessados através dos mais diversos tipos de protocolos, como por exemplo: HTTP, TCP, IPC e MSMQ.

Atualmente temos três alternativas de hosting: self-hosting, IIS e o WPAS. Como há vários detalhes na criação e gerenciamento do hosting, ficaria muito extenso publicar cada detalhe, vantagens e desvantagens que cada uma das técnicas possui. Para maiores detalhes, consulte este artigo que explora cada uma das funcionalidades expostas pelo WCF para a interação com o hosting.

O host é representado dentro do WCF pela classe ServiceHost ou uma de suas variações e, é através dela que efetuamos várias configurações, como endpoints, segurança, etc. Em seu construtor, ela espera a classe que representa o serviço, podendo ser definida através de seu tipo (classe Type) ou através de uma instância desta mesma classe anteriormente criada (Singleton). Para o exemplo utilizado neste artigo, a configuração parcial do host fica da seguinte forma:

using System;
using System.ServiceModel;

using (ServiceHost host = new ServiceHost(typeof(Servico),
    new Uri[] { new Uri("net.tcp://localhost:9393") }))
{
    //endpoints

    host.Open();
    Console.ReadLine();
}
C# VB.NET  

Endpoints

Os endpoints são uma das características mais importantes de um serviço, pois é por onde toda a comunicação é realizada, pois fornece o acesso aos clientes do serviço WCF que está sendo disponibilizado. Para compor um endpoint, basicamente precisamos definir três propriedades que obrigatoriamente precisamos para poder trabalhar: address (A), binding (B) e contract (C) e, opcionalmente, definir alguns behaviors, que falaremos na sequência. A figura abaixo ilustra a estrutura dos endpoints e onde eles estão situados:

Figura 1 - Estrutura de um endpoint.

O address consiste em definir um endereço único que permitirá aos clientes saber onde o serviço está publicado. O endereço geralmente é definido através de uma instância da classe Uri. Essa classe fornece um construtor que recebe uma string, contendo o protocolo, o servidor, a porta e o endereço do serviço (usado para diferenciar entre muitos serviços no mesmo local), tendo a seguinte forma: scheme://host[:port]/[path]. Cada uma dessas configurações são representadas respectivamente pelas seguintes propriedades da classe Uri: Scheme, Host, Port e AbsolutePath.

O protocolo indica sob qual dos protocolos suportados pelo WCF o serviço será exposto. Atualmente temos os seguintes protocolos: HTTP (http://), TCP (net.tcp://), IPC (net.pipe://) e MSMQ (net.msmq://). O host refere-se à máquina onde o serviço irá ser executado, podendo inclusive referenciar o localhost. A porta permite especificarmos uma porta diferente do valor padrão e, quando omitida, ela sempre assumirá a porta padrão especificada pelo protocolo. E, finalmente, temos o path, que é utilizado quando desejamos diferenciar entre vários serviços expostos sob um mesmo protocolo, host e porta.

O binding indica como a comunicação será realizada com aquele endpoint, como por exemplo, qual transporte será utilizado (HTTP, TCP, etc), qual a codificação utilizada (Binary ou Text) para serializar a mensagem, segurança, suporte à transações, etc. O WCF disponibiliza vários bindings, e através da tabela abaixo podemos analisar as características de cada um deles (sendo as opções em negrito a configuração padrão):

Binding Características
BasicHttpBinding
  • Transporte: HTTP.

  • Segurança: None, Transport, Message e Mixed.

  • Suporte à Transações: Não.

  • Duplex: Não.

  • Sessions: Não.

  • Encoding: Text.

  • Modos de Transferência: Streaming e Buffered.

WebHttpBinding
  • Transporte: HTTP.

  • Segurança: None e Transport.

  • Suporte à Transações: Não.

  • Duplex: Não.

  • Sessions: Não.

  • Encoding: Text e MTOM.

  • Modos de Transferência: Streaming e Buffered.

WSHttpBinding
  • Transporte: HTTP.

  • Segurança: None, Transport, Message e Mixed.

  • Suporte à Transações: Sim.

  • Duplex: Sim.

  • Sessions: Sim.

  • Encoding: Text e MTOM.

  • Modos de Transferência: Buffered.

WSDualHttpBinding
  • Transporte: HTTP.

  • Segurança: None, Message e Mixed.

  • Suporte à Transações: Sim.

  • Duplex: Sim.

  • Sessions: Sim.

  • Encoding: Text e MTOM.

  • Modos de Transferência: Buffered.

WSFederationHttpBinding
  • Transporte: HTTP.

  • Segurança: None e Message.

  • Suporte à Transações: Sim.

  • Duplex: Não.

  • Sessions: Sim.

  • Encoding: Text e MTOM.

  • Modos de Transferência: Buffered.

NetTcpBinding
  • Transporte: TCP.

  • Segurança: None, Transport, Message e Mixed.

  • Suporte à Transações: Sim.

  • Duplex: Sim.

  • Sessions: Sim.

  • Encoding: Binary.

  • Modos de Transferência: Streaming e Buffered.

NetPeerTcpBinding
  • Transporte: Peer.

  • Segurança: Transport.

  • Suporte à Transações: Não.

  • Duplex: Sim.

  • Sessions: Não.

  • Encoding: --.

  • Modos de Transferência: Buffered.

NetNamedPipeBinding
  • Transporte: IPC.

  • Segurança: None e Transport.

  • Suporte à Transações: Não.

  • Duplex: Sim.

  • Sessions: Sim.

  • Encoding: Binary.

  • Modos de Transferência: Streaming e Buffered.

NetMsmqBinding
  • Transporte: MSMQ.

  • Segurança: None, Transport e Message.

  • Suporte à Transações: Sim.

  • Duplex: Não.

  • Sessions: Sim.

  • Encoding: Binary.

  • Modos de Transferência: Buffered.

MsmqIntegrationBinding
  • Transporte: MSMQ.

  • Segurança: Transport.

  • Suporte à Transações: Sim.

  • Duplex: Não.

  • Sessions: Não.

  • Encoding: --.

  • Modos de Transferência: Buffered.


Observação: Além da lista de bindings que vimos acima, temos ainda a classe CustomBinding que, como o próprio nome indica, possibilita a criação de um binding customizado, definindo qual o meio de transporte, codificação, suporte ou não à transações, etc.

Finalmente, a última característica de um endpoint é o contrato. Como já vimos acima, o contrato é representado por uma Interface e, uma vez que ele é definido como um contrato de serviço, são esses membros que serão disponibilizados aos clientes em forma de operações, definindo os parâmetros de entrada e o tipo de retorno e o formato da mensagem (request-reply, one-way ou duplex).

O que diferencia uma Interface normal de uma Interface que será utilizada como contrato de serviço. Os atributos que devem ser decorados na mesma (ServiceContractAttribute) e também naqueles membros que farão parte do serviço (OperationContractAttribute), devendo também se atentar aos tipos que são expostos, pois tipos complexos também devem ser marcados com um atributo especial (DataContractAttribute), e as propriedades que ele irá expor devem ser decoradas com o atributo DataMemberAttribute, tudo como já foi explicado acima.







 

Conheça os produtos do autor Israel Aéce

Inclua um comentário sobre o artigo Topo
Elogios e críticas são muito bem vindos, porém o comentário deve ter referência ao artigo em pauta.
O portal e o autor agradecem.
Nome:    
E-mail:      
Comentários:    
Digite a palavra abaixo:  
Para dúvidas técnicas, NÃO UTILIZE ESTE ESPAÇO, utilize nosso fórum de discussão.
http://linhadecodigo.com.br/cs2/forum
 
Comentários sobre o artigo Ver Todos comentários
Excelente artigo, Israel. Parabéns e obrigado.
Quem enviou: Thiago
Postado em: 23/09/2009 00:00:00
Outros artigos do autor Topo
Comunicação Local no Silverlight
Consumindo um STS diretamente
Autenticação via Claims no WCF
Detectando mudanças em objetos
Consumindo serviços REST com HttpClient
REST e o WSDL
Autenticação com WCF e jQuery
Tratando erros com jQuery e WCF
A importância do StrongName
AppFabric para desenvolvedores WCF
Utilizando jQuery para invocar Actions
Consumindo serviços WCF com jQuery
Habilitando REST em projetos WCF
Role vs. Claims
Autenticação via Claims no ASP.NET MVC
Explorando os módulos do WIF para o ASP.NET
Compressão em Serviços WCF
Autenticação via Claims no ASP.NET WebForms
Explorando o WIF
Os Elementos do Sistema de Identidade
Uma nova forma de Autenticação/Autorização
Autenticação e Autorização no ASP.NET MVC
Explorando Segurança do ASP.NET - Roles
Explorando Segurança do ASP.NET - Membership e MembershipUser
Programação Assíncrona no ASP.NET MVC
Utilizando Resources no WPF
DataBinding em WPF
Introdução aos Commands
UserName e Password em serviços WCF para Silverlight
Introdução aos Routed Events
Introdução às Dependency Properties
Threading em WPF
Serviços TCP no Silverlight
Binary Encoding no Silverlight 3.0
Granularidade de Serviços
Serviços CRUD
Novas classes para inicialização de objetos
.NET Reactive Framework
Host de Serviços em Aplicações Windows
Overloading de métodos no WCF
Internals - Proxy de serviços WCF
Limites de Tamanho e Cotas do WCF
Timeouts do WCF
A importância dos Namespaces em serviços
WCF – Roteamento de Mensagens
Persistência de dados em aplicações Silverlight
WCF - Durable Services
WCF - Polling Duplex
WCF – WS-Discovery
Compartilhando tipos entre o serviço e o cliente
WCF - MessageContracts
Por dentro da classe Message
Headers vs. Properties
Migrando de ASMX para WCF
WCF Service no IIS
WCF, IIS e Threads
UserName e Certificados
Melhorias na configuração de serviços WCF
Customizando o ServiceHost
WCF - Internals e Extensibilidade
WCF - Segurança - Autenticação e Autorização Customizadas
WCF - Syndication
WCF - Segurança
WCF - Message Queue
WCF - Transações
WCF - Reliable Messages
WCF - Error Handling
WCF - Tipos de Mensagens
WCF - Sincronização
Por dentro da Base Classe Library - Capítulo 14 - Threading
Por dentro da Base Classe Library - Capítulo 13 - Reflection
Por dentro da Base Classe Library - Capítulo 12 - Interoperabilidade com componentes COM
Por dentro da Base Classe Library - Capítulo 11 - Criando Serviços do Windows
Por dentro da Base Classe Library - Capítulo 10 - Envio de Mensagens (E-mails)
Por dentro da Base Classe Library - Capítulo 9 - Utilizando Code Access Security – CAS
Por dentro da Base Classe Library - Capítulo 8 - Criptografia
Por dentro da Base Classe Library - Capítulo 7 - Globalização de Aplicações
Por dentro da Base Classe Library - Capítulo 6 - Serialização
Por dentro da Base Classe Library - Capítulo 5 - Manipulando o sistema de arquivos
Por dentro da Base Classe Library - Capítulo 4 - Monitoramento e depuração de aplicações
Por dentro da Base Classe Library - Capitulo 3 - Utilização de Assemblies
Por dentro da Base Classe Library - Capitulo 2 - Trabalhando com Coleções
Por dentro da Base Classe Library - Capitulo 1 - Tipos de dados e Interfaces
Por dentro da Base Classe Library - Introdução
WCF - Throttling e Pooling
WCF - Gerenciamento de Instâncias
WCF - Transferência e Codificação de Dados
WCF - Chamadas Assíncronas
WCF - Serviços RESTFul
WCF - Expondo componente COM+
WCF Partial Trust
Vídeo: Control Adapters - ASP.NET 2.0 (Para assinantes)
ASP.NET: Criando um BuildProvider
Criando novos Providers
ASP.NET Internals
Consumindo serviços WCF no AJAX
Client Application Services
Know Types em WCF
Explorando o LINQ
Boas Práticas de Programação
Tracing em serviços WCF
Integrando WCF com MembershipProvider e RoleProvider
WCF - Hosting
ASP.NET: WebParts
Entendendo e Implementando Segurança no ASP.NET 2.0
.NET 2.0 - Criando um DebuggerVisualizer
Health Monitoring - ASP.NET 2.0
Client-Side Callbacks - ASP.NET 2.0
Por dentro do ADO.NET 2.0
ASP.NET: Criando um DataGrid em Runtime
Páginas Assíncronas do ASP.NET 2.0 - Parte 1
Pré-Compilação do ASP.NET 2.0
ASP.NET 2.0 - Explorando o GridView
Objeto Profile - ASP.NET 2.0 (parte 2)
Segurança - ASP.NET 2.0 - Utilizando Providers Models
ASP.NET - Validation Groups (controles de validação)
.NET Framework 2.0: Compressão de Arquivos no .NET
Objeto Profile - ASP.NET 2.0 (parte 1)
Performance em aplicações ASP.NET
Criando objetos SQL com .NET (CLR - Managed Code)
.NET: Guia Inicial do NHibernate
.NET: Creational Pattern - Builder
Somando Valores no DataGrid
Paginando Dados utilizando DataList
Behavioral Pattern – Template Method
Comparação de Sintaxe de Linguagens no .NET
Disparando o Evento SelectedIndexChanged do DropDownList dentro do DataGrid
Analisando o Microsoft PetShop 3.0
DataGrid e DataList, Arquivos e Imagens
Migrando de ASP para ASP.NET
Adicionando Registros no DataGrid
Formatando Valores em Colunas do DataGrid
Configurando uma Aplicação ASP.NET
ASP.NET - Como fazer para... Dicas de funcionalidades úteis ao dia-a-dia
Construindo uma Área Restrita em aplicativos Web
ASP.NET: Trabalhando com Arquivos
Utilizando o System.Collections.CollectionBase
IEWebControls - TabStrip e MultiPage
Criando um DALHelper (Data Application Layer - Camada de Dados)
DataGrid Editável com DropDownList e CheckBox - ASPNET
Depurando e Tratando Erros no VB.NET
Publicando uma WebApplication
Utilizando Crystal Reports no Visual Studio .NET
Validando números de CPF utilizando WEBApplication e VB.NET
Criação de Comentários e Documentação em VB.NET
Artigos relacionados Topo
Melhorando WinApps seguindo WebApps
Cadastro de um Consultório em Windows Forms, com C# e SQL Server – Parte 12
Criar arquivo de integração com Integration Services
Trabalhando com Array Params no C#
Pegando o horário inicial e final do uso do Windows usando C#
Como funcionam as Arrays (Matrizes) Multidimensionais no C#?
Cadastro de um Consultório em Windows Forms, com C# e SQL Server – Parte 11
Documentação de Código .Net
ASP.NET MVC Custom Helpers
Eval em C# com IronRuby
Trabalhando com CLR: Stored Procedure – Primeiro passo
Entendendo interfaces com C#
Executar aplicações em background com Agendador de Tarefas Windows
ExpandoObject: dinamismo no .NET 4.0
Integração C# + Ruby
Utilizando um Tipo T como parâmetro e recuperando seus valores
URL Routing com o Visual Studio .NET 2010
Acessando dados com Textboxes e botões de navegação
Controle de Acesso Windows Forms C# - Parte 3
Trabalhando com SQL CLR: Início
Funcionalidades do Office usando Visual Studio for Office – Parte 3
Cadastro de um Consultório em Windows Forms, com C# e SQL Server – Parte 10
Carregar DataGridView utilizando linq to xml
Funcionalidades do Office usando Visual Studio for Office - Parte 2
Estenda as funcionalidades do Office com o Visual Studio for Office
Cadastro de um Consultório em Windows Forms, com C# e SQL Server – Parte 9
Descubra o ADO.NET Entity Framework
Controle de Usuários – Windows Forms C# (Parte 2)
Por que utilizar StringBuilder?
Formatando String rapidamente
Produtos relacionados Topo
CD/DVD: CD de Treinamento Criando Aplicações Asp.Net em Camadas (parte integrante do portal de vídeos .Net)
Pacote: Promoção: Portal de Vídeos .Net + CD Novidades das Linguagens (válido somente para pagamento via boleto bancário)
CD/DVD: DVD de Treinamento E-Commerce com Visual Web Developer
E-Book: Banco de dados com C# e Visual Studio .Net 2005 (entrega via download)
E-Book: ASP.NET Ajax com C# e VB.NET (E-Book com entrega via download)
CD/DVD: CD de Treinamento - Desenvolvendo uma aplicação Smart Client com Visual Studio 2005, C#, Web Services e Banco de Dados
CD/DVD: CD de Treinamento sobre LINQ to SQL para iniciantes com Visual Studio .Net 2008
CD/DVD: CD de Treinamento sobre ADO.NET para Iniciantes
CD/DVD: CD de Treinamento Novidades das Linguagens C# 3.0 e VB 9 (Visual Basic 9)
CD/DVD: CD de Treinamento Introdução a .NET com C# - Visual Studio 2005
CD/DVD: CD ASP.NET 2.0 - Atualização Rápida (Visual Studio .NET 2005)
E-Book: E-Book: Lógica de Programação com C# e VB.NET (via download)
CD/DVD: CD - Treinamento de ASP.NET 2.0 AJAX Extensions
Livro: ASP.NET Utilizando C# - De Programador para Programador
E-Book: E-Book: Programando com C# e Visual Studio .NET 2005 (entrega via download)
E-Book: E-Book: Curso Prático de Visual Studio .NET 2005 (entrega via download)
E-Book: E-Book: Curso prático de Visual Studio .NET (via download)
Livro: Programando em C#.Net para Web: Guia Rápido Usando Visual Studio.Net 2003
Livro: VB.NET - Desenvolvendo uma aplicação comercial
© Copyright 2001-2010 Codeline Editora, Comércio e Tecnologia Ltda. | Política de privacidade e de uso | Anuncie | Fale conosco

» Site hospedado na Porta 80 Web Hosting «
Nossos números
Dicas: 1.314
Códigos/scripts: 279
Funções de VBScript : 90
Funções JScript : 05
Livros: 1.805
Notícias: 2.623
Artigos: 3.020
Cases: 14
Oportunidades: 4.591
Vídeos .Net: 484
Publicidade

Conheça a loja do Linha de Código.

Microsoft indica Linha de Código.

Assine a Revista Mundo .NET
Portal de Vídeos .NET - os melhores vídeos .NET estão aqui
O que você fará com o Visual Studio 2010?
Revista Codificando .Net

Siga-nos no Twitter

Linha de Código no Orkut
Fórum de discussão do portal Linha de Código
Feeds
Oportunidades
Notícias
Artigos
Artigos personalizado
       (Por assunto)
Artigos personalizado
       (Por autor)
Portal Vídeos .NET
Portal Vídeos Delphi
LC Blog
       (Onde você faz a notícia)
Promoções
Promoção Wordpress + Tabless (válido somente para pagamento via boleto bancário)
Promoção Wordpress + Tabless (válido somente para pagamento via boleto bancário)
De: R$ 149,70
Por: R$ 99,80
Promoção PHP + MYSQL Intelimax (válido somente para pagamento via boleto bancário)
De: R$ 308,00
Por: R$ 219,00
Promoção Especial Infra
De: R$ 175,95
Por: R$ 136,00
Promoção: Portal de Vídeos .Net + CD Novidades das Linguagens (válido somente para pagamento via boleto bancário)
De: R$ 162,00
Por: R$ 89,00
Promoção VSTS (válido somente para pagamento via boleto bancário)
De: R$ 219,00
Por: R$ 146,00
CDs/DVDss
DVD Desenvolvimento de Games - Programando Jogos com o 3D Game Studio
DVD Desenvolvimento de Games - Programando Jogos com o 3D Game Studio
Por: R$ 59,00
DVD Curso de CorelDraw X4
Por: R$ 79,90
DVD Curso de Fireworks CS4
Por: R$ 49,90
DVD Curso de Indesign CS4
Por: R$ 55,00
DVD Curso de Efeitos Digitais
Por: R$ 49,90
Livros
MSProject 2007 - Metodologia e Critérios de Qualidade para o Gerenciamento de Projetos
MSProject 2007 - Metodologia e Critérios de Qualidade para o Gerenciamento de Projetos
De: R$ 129,00
Por: R$ 77,40
Foundation FLASH CS3 para Designers
Ciência Moderna
De: R$ 139,00
Por: R$ 83,40
ALGORITMOS O Guia Essencial
Alta Books
De: R$ 64,90
Por: R$ 58,40
Treinamento Prático em Dreamweaver
Digerati Books
Por: R$ 14,95
Estudo Dirigido de Adobe Photoshop CS4 em português - Para Windows
Erica
De: R$ 88,00
Por: R$ 74,80
E-Books
Manual Completo de Estudos MCSE 70-270 - Instalando, Configurando e Administrando o Windows XP (506 páginas) - Entrega via download
Manual Completo de Estudos MCSE 70-270 - Instalando, Configurando e Administrando o Windows XP (506 páginas) - Entrega via download
Por: R$ 30,00
Manual de Estudos - Exame 70-291 - Windows Server 2003 (606 páginas) - entrega via download
Por: R$ 30,00
Dominando MS – Visio ® em 20 Passos - Melhores Práticas em Gestão de Projetos (entrega via download)
Por: R$ 30,00
MS-Project® 2007 - Melhores Práticas de Gestão de Projetos - Dominando MS – Project ® em 20 Passos (e-book com entrega via download)
Por: R$ 20,00
Banco de dados com C# e Visual Studio .Net 2005 (entrega via download)
Por: R$ 20,00
Os 10+ | Autores do dia
Israel Aéce
Júlio Cesar Fabris Battisti
Anderson Patricio
Luiz Felipe de Freitas
Marcio Franco
Eric C M Oliveira
Robert Martim
Ramon Durães
Alessandro de Oliveira Faria
Alfred Reinold Baudisch
Os 10+ | Artigos do dia
HTML Básico
HTML Avançado
Criando aplicativos para o Orkut
PL/SQL - Procedures e Funções
Tutorial de Tabelas Dinâmicas no Excel – Parte 1
Como configurar Conexão Remota no SQL Server 2005
WCF – Gerenciamento de Instância
Básico de C++: Estrutura de um programa em C++
ASP.NET 2.0 - Explorando o GridView
Tutorial: Desenhando com o Corel Draw