Revista Active Delphi
quinta-feira, 29 de julho 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
Explorando Segurança do ASP.NET - Membership e MembershipUser
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  
Explorando Segurança do ASP.NET - Membership e MembershipUser
Publicado em: 22/02/2010

A classe estática Membership, encontrada dentro do Namespace System.Web.Security, é usada pelo ASP.NET para validar as credenciais do usuário e gerenciar as configurações do mesmo. Esta classe faz uso da classe FormsAuthentication (já existente nas versões anteriores do ASP.NET) para criar e gerenciar a autenticação do usuário dentro da aplicação Web.

Falando um pouco sobre o seu funcionamento: existe um membro interno chamado s_Provider do tipo MembershipProvider (a classe base para as classes concretas de Membership, como por exemplo o SqlMembershipProvider), o qual receberá a instância da classe concreta. Essa inicialização acontece quando um método interno chamado Initialize é executado. Ele se encarrega de extrair os providers do arquivo Web.Config e instanciá-los para que, quando chamarmos os métodos e propriedades, já sejam efetivamente os métodos e propriedades da classe concreta que queremos utilizar.

Como esta classe encapsula o acesso ao provider específico, ela fornece facilidades como: criação de novos usuários, validação de usuários, gerenciamento de usuários em seu repositório (SQL Server, ActiveDirectory, etc). Como já vimos anteriormente o funcionamento interno desta classe, podemos perceber que o ASP.NET confia no provider especificado no Web.Config para se comunicar com a fonte de dados. Como já sabemos, o .NET Framework inclui a classe SqlMembershipProvider para acesso e persistência dos dados no SQL Server e é este que vamos utilizar no decorrer dos exemplos deste artigo.

Mas esta arquitetura é extensível, ou seja, a qualquer momento eu posso criar o meu próprio provider de Membership, onde eu queira customizá-lo para um outro repositório qualquer. E, para que isso seja possível, é necessário herdarmos da classe abstrata chamada MembershipProvider e customizá-la de acordo com o nosso repositório. Para ilustar o cenário, imaginemos que desejamos ter um provider de Membership sendo persistido em um arquivo XML:

public class XmlMembershipProvider : MembershipProvider
{
    // customizo aqui todos os métodos e
    // propriedades necessárias
}

Depois do provider criado, basta definí-lo nas configurações do Web.Config e começar a utilizá-lo.

A configuração no arquivo Web.Config

Por padrão, todas as aplicações ASP.NET 2.0 já utilizam o Membership. Isso porque dentro do arquivo de configuração machine.config já temos um provider chamado AspNetSqlProvider que utiliza o SqlMembershipProvider. Este provider aponta para um banco de dados chamado ASPNETDB.MDF que encontra-se dentro da pasta App_Data da aplicação e é habilitado quando marcamos a opção AspNetSqlProvider no Web Site Administration Tool. Como o intúito do artigo é mostrar como configurar isso manualmente, vamos especificar o provider em nossa aplicação e configurá-lo para atender as nossas necessidades e, para isso, vamos até o arquivo Web.Config da aplicação para efetuar tal customização.

Já que não queremos utilizar o provider e o banco de dados ASPNETDB.MDF fornecido por padrão pela plataforma, devemos recorrer ao arquivo Web.Config para configurar o provider da forma que precisarmos. Para esta configuração temos os seguintes elementos: membership e providers, que deverão estar declarados dentro do elemento system.web. Estes elementos, por sua vez, possuem uma série de atributos que definem as configurações e possíveis comportamentos e validações que o nosso provider irá desempenhar.

Para cada provider que é adicionado dentro do elemento providers especificamos os atributos de configuração deste provider e, através de atributos definidos no elemento membership, definimos configurações a nível "global de providers". Veremos cada um dos possíveis atributos (voltado para o uso do SqlMembershipProvider) e seus respectivos valores nas tabelas abaixo:

Elemento membership
Atributo Tipo Valor Padrão Opcional Descrição
defaultProvider String AspNetSqlProvider Sim

O nome do provider que você vai utilizar. Lembrando que no elemento providers você pode especificar uma lista deles e é através do defaultProvider que você especifica qual deles utilizar.

userIsOnlineTimeWindow Inteiro 15 Sim

Define o tempo em que usuário é considerado como online, que é utilizado para calcular o número aproximado de usuários online.

hashAlgorithmType String SHA1 Sim

Utilizado para especificar o algoritmo de hashing que será usado pelo provider, sempre quando o mesmo precisar efetuar hashing em dados sigilosos.

 

Elemento add - providers [ "filho" do membership ]
Atributo Tipo Valor Padrão Opcional Descrição
applicationName String ApplicationVirtualPath Sim

Especifica o nome da aplicação em que o Membership está sendo utilizado, possibilitando desta forma, você trabalhar com múltiplas aplicações utilizando a mesma base de dados, mas também podendo utilizar o mesmo nome da aplicação para outras aplicações ASP.NET.

O provider que faz o uso do ActiveDirectory ignora esta propriedade.

Obs.: Atente-se quando você define como nome da aplicação o caracter /. Este caracter pega o nome do diretório virtual da aplicação corrente e atribui como nome da aplicação. Isso pode não refletir exatamente o seu ambiente de produção e, conseqüentemente, ter problemas em não encontrar os registros vinculados à aplicação.

commandTimeout Inteiro 30 (ADO.NET) Sim

Especifica o número em segundos para a configuração do SqlCommand. É através dele que definimos o tempo de espera entre a execução do comando e o erro.

connectionStringName String   Não

Especifica o nome da ConnectionString que irá ser utilizada pelo provider. Esta Connection String é especificada no elemento connectionStrings.

description String   Sim

Uma breve descrição do provider.

enablePasswordRetrieval Boolean False Sim

Especifica se será ou não permitido a recuperação do password do usuário. Se True, o provider permitirá a recuperação.

enablePasswordReset Boolean True Sim

Especifica se será ou não permitido reinicialização da senha do usuário. Se True, o provider permitirá a reinicialização.

maxInvalidPasswordAttempts Inteiro 5 Sim

Define o número de tentativas de acesso até que a conta do usuário seja bloqueada. O resultado dá-se da soma de tentativas inválidas de recuperação da palavra-chave ou senha.

minRequiredNonalphanumericCharacters Inteiro 1 Sim

Define o número de caracteres especiais que a senha deverá conter, não podendo ser definido com um valor menor que 0 ou maior que 128 ou ainda maior que o valor estipulado no atributo minRequiredPasswordLength.

minRequiredPasswordLength Inteiro 1 Sim

Define o número mínimo de caracteres para a senha. Também não pode ser definido com um valor menor que 0 ou maior que 128.

name String   Não

Define o nome do provider, que deverá ser informado no atributo defaultProvider do elemento membership quando você quiser utilizá-lo.

passwordAttemptWindow Inteiro 10 Sim

Define o intervalo de tempo em que é efetuada a contabilidade de tentativas de login falhadas. Quando chegamos ao fim do intervalo especificado neste atributo e o número de tentativas falhadas não atingiu o valor estipulado no atributo maxInvalidPasswordAttempts, os contadores são reinicializados.

passwordFormat String Hashed Sim

Define o formato de armazenamento de senhas na fonte de dados. Os possíveis valores para este atributo estão definidos no enumerador MembershipPasswordFormat e são exibidos abaixo:

  • Clear: As senhas não são criptografadas.
  • Encrypted: Senhas são criptografadas usando as configurações especificadas no elemento de configuração machineKey.
  • Hashed: As senhas são criptografadas utilizando o algoritmo de hash SHA1.

Obs.: Como algoritmos hash são irreversíveis, somente conseguiremos recuperar a senha se este atributo for diferente de Hashed.

passwordStrengthRegularExpression String   Sim

Especifica uma expressão regular para validar uma senha e esta expressão deverá funcionar com a classe RegEx.

requiresQuestionAndAnswer Boolean True Sim

Indica se é ou não necessário informar uma pergunta e sua respectiva palavra-chave para que isso funcione como uma espécie de "lembrete" para o usuário.

requiresUniqueEmail Boolean True Sim

Especifica se o endereço de e-mail do usuário deve ser único.

type String   Não

Indica o tipo que contém a implementação deste provider, ou seja, a classe concreta que implementa a classe abstrata MembershipProvider.

Agora que já conhecemos todos os parâmetros possíveis dos elementos acima, veremos abaixo um exemplo de como estar configurando isso dentro do arquivo Web.Config da aplicação ASP.NET:

<?xml version="1.0"?>
<configuration>
  <connectionStrings>
    <clear/>
    <add 
      name="SqlConnectionString"
      connectionString="Data Source=local;Initial Catalog=DBTest;Integrated Security=True;"/>
  </connectionStrings>
  <system.web>
    <membership defaultProvider="SqlMembershipProvider">
      <providers>
        <clear/>
        <add
          name="SqlMembershipProvider" 
          type="System.Web.Security.SqlMembershipProvider" 
          connectionStringName="SqlConnectionString" 
          applicationName="NomeAplicacao" 
          enablePasswordRetrieval="false" 
          enablePasswordReset="true" 
          requiresQuestionAndAnswer="false" 
          requiresUniqueEmail="false" 
          passwordFormat="Hashed" 
          minRequiredNonalphanumericCharacters="0" 
          minRequiredPasswordLength="8" />
      </providers>
    </membership>
  </system.web>
</configuration>

Algumas considerações do código acima: temos uma coleção de connectionStrings, onde através do elemento connectionStrings as informamos e no atributo connectionStringName especificamos o nome do conexão que iremos utilizar; outro ponto importante é o elemento add que é "filho" do elemento providers: como podemos ter uma coleção de providers, podemos adicionar quantos desejarmos e sempre fazemos isso adicionando um novo elemento add e as suas respectivas configurações.

Agora que já temos conhecimento suficiente para criar a infraestrutura e configurar um determinado provider, vamos analisar a classe Membership e seus respectivos membros. Veremos agora como manipular e gerir usuários dentro de uma base de dados SQL Server e, mais tarde, quando estivermos falando sobre os controles que o ASP.NET fornece, veremos como implementar a segurança em uma aplicação utilizando FormsAuthentication.

Não vou me preocupar aqui em mostrar e explicar as propriedades da classe Membership justamente porque são propriedades de somente leitura e apenas devolvem os valores que configuramos no Web.Config para o provider. Nos concentraremos apenas nos métodos, pois são o mais importante e nos dão todas as funcionalidades de manutenção e criação de usuários na base de dados.

Método Descrição
CreateUser

Adiciona um novo usuário na base de dados. Este método é sobrecarregado.

Como o próprio nome diz, ele adiciona um novo usuário na base de dados e retorna um objeto do tipo MembershipUser (veremos sobre ele mais abaixo) se o usuário for criado com sucesso. Se, por algum motivo, a criação do usuário falhar, uma Exception do tipo MembershipCreateUserException é atirada. Além disso, você também pode, através de um parâmetro de saída do tipo MembershipCreateStatus, recuperar o motivo pelo qual a criação falhou.

DeleteUser

Exclui um usuário na base de dados dado um nome de usuário. Este método é sobrecarregado.

Este método retorna um parâmetro booleano, indicando se o usuário foi ou não excluído com sucesso. Também é possível passar como parâmetro para este método um valor booleano indicando se os dados relacionados com este usuário serão também excluídos. O padrão é True.

FindUsersByEmail

Dado um e-mail para ser procurado, o método retornará (paginando) uma coleção do tipo MembershipUserCollection, onde cada elemento desta coleção é do tipo MembershipUser.

O SQL Server executa a busca utilizando o operador LIKE e você pode passar para o mesmo os caracteres de busca para que possa ser analisado de acordo com a sua necessidade. Lembrando também que há um overload para este método onde você pode especificar os parâmetros pageIndex, pageSize e totalRecords para retornar os dados paginados para a sua aplicação e ter uma melhor performance se houver uma quantidade considerável de registros na base de dados.

FindUsersByName

Dado um nome de usuário para ser procurado, o método retornará (paginando) uma coleção do tipo MembershipUserCollection, onde cada elemento desta coleção é do tipo MembershipUser.

O SQL Server executa a busca utilizando o operador LIKE e você pode passar para o mesmo os caracteres de busca para que possa ser analisado de acordo com a sua necessidade. Lembrando também que há um overload para este método que você pode especificar os parâmetros pageIndex, pageSize e totalRecords para retornar os dados paginados para a sua aplicação e, ter uma melhor performance se houver uma quantidade considerável de registros na base de dados.

GeneratePassword

Gera uma senha randômica dado um tamanho máximo de caracteres e o número de caracteres não alfanuméricos.

Este método é comumente utilizado para gerar senhas randômicas e também é chamado pelo método ResetPassword para reinicializar a senha do usuário, ou seja, criar uma espécie de "senha temporária". Se existir no mínimo um caracter alfanumérico, eles não poderão ser caracteres não "imprimíveis" ou caracteres ocultos. Eis aqui as possibilidades: !@#$%^&*()_-+=[{]};:<>|./?

GetAllUsers

O método retornará (paginando) uma coleção do tipo MembershipUserCollection contendo todos os usuários da base de dados, onde cada elemento desta coleção é do tipo MembershipUser.

Lembrando também que há um overload para este método que você pode especificar os parâmetros pageIndex, pageSize e totalRecords para retornar os dados paginados para a sua aplicação e, ter uma melhor performance se houver uma quantidade considerável de registros na base de dados.

GetNumberOfUsersOnline

Retorna o número de usuários online para a aplicação corrente, ou seja, a qual está definida na configuração do provider.

O critério para o usuário ser considerado como online é a data da última atividade ser maior que a hora corrente menos o valor especificado no atributo UserIsOnlineTimeWindow. A data da última atividade é atualizada para a data corrente quando as credenciais do usuário são passadas para o método ValidateUser ou UpdateUser ou quando você chama o método GetUser ou o mesmo método sobrecarregado, passando o parâmetro userIsOnline como True.

GetUser

Retorna um objeto do tipo MembershipUser que representa um usuário.

Se chamar o método GetUser sem nenhum parâmetro, o método retornará o usuário logado. Se optar por passar o nome do usuário para este mesmo método, mas utilizando uma sobrecarga dele, ele retornará os dados deste usuário especificado.

GetUserNameByEmail

Retorna um objeto do tipo MembershipUser baseando-se em um e-mail informado como parâmetro.

UpdateUser

Atualiza na base de dados as informações de um determinado usuário.

Esse método recebe um objeto do tipo MembershipUser. Este objeto pode ser um que recuperamos anteriormente da base de dados ou até mesmo um novo que acabamos de instanciar e definir seus valores.

ValidateUser

Dado um nome de usuário e senha, este método retorna um valor booleano indicando se é ou não um usuário válido.

Em alguns dos métodos acima comentamos sobre o objeto chamado MembershipUser. Veremos abaixo a lista de métodos e propriedades do mesmo com uma breve descrição.

Propriedade Descrição
Comment

Comentários adicionais sobre o usuário.

CreationDate

Data/hora em que o usuário foi criado dentro da base de dados.

Email

E-mail do usuário.

IsApproved

Indica se o usuário pode ou não se autenticar.

Mesmo informando o nome de usuário e senha válidos e esta propriedade estiver definida como False, o método ValidateUser retornará False.

IsLockedOut

Indica se o usuário está barrado devido a tentativas incorretas de acessar a aplicação.

IsOnline

Indica se o usuário está ou não online.

LastActivityDate

Recupera a data/hora do último acesso/atividade dentro da aplicação.

LastLockoutDate

Recupera a data/hora do último vez que esse usuário foi barrado.

LastLoginDate

Recupera a data/hora da última vez em que o usuário fez o login com sucesso na aplicação.

LastPasswordChangedDate

Recupera a data/hora da última vez em que o usuário alterou a sua senha.

PasswordQuestion

Recupera uma determinada questão para servir como "lembrete" da senha do usuário.

ProviderName

Recupera o nome do provider que o mesmo está utilizando.

ProviderUserKey

Recupera o identificador do usuário dentro da base de dados.

Na base de dados, o identificador é criado e armazenado como um tipo de dado chamado uniqueidentifier. Como a propriedade ProviderUserKey retorna um Object se quiser ter algo mais tipado, terá que convertê-lo para o objeto Guid, que corresponde ao tipo de dado uniqueidentifier da base de dados.

UserName

Recupera o nome do usuário.

 

Método Descrição
ChangePassword

Altera a senha do usuário na base de dados.

Este método recebe dois parâmetros: senha atual e a nova senha e, retorna um valor booleano indicando se a alterção aconteceu com sucesso. Vale lembrar que as senhas informadas neste método devem estar de acordo com as especificações informadas na configuração do provider no arquivo Web.Config.

ChangePasswordQuestionAndAnswer

Altera a pergunta e resposta que ajudam o usuário a lembrar a senha.

GetPassword

Recupera a senha de um determinado usuário.

Se a propriedade EnablePasswordRetrieval estiver definida como False, uma Exception será atirada. Se o atributo passwordFormat do provider estiver definido como Hashed, a senha antiga não será recuperada, mas uma nova senha será gerada e retornada através do método ResetPassword.

ResetPassword

Reinicializa a senha do usuário e a retorna ao chamador.

Se o atributo enablePasswordReset estiver definido como False e o método ResetPassword for chamado, uma Exception será atirada. Agora, se o atributo requiresQuestionAndAnswer estiver definido como True, você pode utilizar o método ResetPassword, desde que utilize a sobrecarga do mesmo, onde você deve fornecer a palavra-chave para o usuário.

UnlockUser

Desbloqueia um usuário para o mesmo poder voltar a acessar a aplicação. Um valor booleano é retornado indicando se o desbloqueio foi ou não realizado com sucesso.

Depois da teoria veremos abaixo um trecho curto que mostra como chamar esses métodos e propriedades via código:

// Criando Usuário
MembershipCreateStatus status = MembershipCreateStatus.UserRejected;
MembershipUser user =
    Membership.CreateUser(
        "IsraelAece",
        "P@$$w0rd",
        "israel@projetando.net",
        "Questão Password",
        "Resposta Password",
        true,
        out status);
Response.Write(string.Format("Status Criação: {0}", status.ToString());

// Recuperando Usuário
MembershipUser user = Membership.GetUser("IsraelAece");
if(user != null)
{
    Response.Write(string.Format("E-mail: {0}", user.Email));
}

// Excluindo Usuário
if(Membership.Delete("IsraelAece"))
{
    Response.Write("Usuário excluído com sucesso.");
}

// Populando um GridView
this.GridView1.AutoGenerateColumns = true;
this.GridView1.DataSource = Membership.GetAllUsers();
this.GridView1.DataBind();

Integração com outras tabelas

Umas das principais dúvidas é como integrar a tabela de aspnet_Membership com outras tabelas do banco de dados, como por exemplo, uma tabela com o endereço, R.G., C.P.F., entre outros dados. Neste caso cria-se uma coluna chamada UserId do tipo uniqueidentifier nesta tabela "filha" que será uma ForeignKey da tabela aspnet_Membership. Claro que o objeto MembershipUser ainda continuará com as mesmas propriedades e, apesar de um pouco complicado, você teria que sobrescrever o provider para poder contemplar esse novo design do seu objeto.

Para ilustrar, analise a imagem abaixo. Foi criada a relação entre as tabelas através do aspnet_Membership.UserId x Colaboradores.ColaboradorID para firmar o relacionamento entre as tabelas:

Figura 5 - Relacionamento com a tabela aspnet_Membership.





MS TechEd 2010



 

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
Ainda não existem comentários sobre este artigo. Seja o(a) primeiro(a)!
Outros artigos do autor Topo
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
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 - Introdução
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
Acesso a Dados com ASP.NET - Parte 4
Acesso a Dados com ASP.NET - Parte 3
Acesso a Dados com ASP.NET - Parte 2
Acesso a Dados com ASP.NET - Parte 1
Usando DataSet Tipado com ASP.NET
Gerenciador de conteúdo ASP.NET MVC 2 - Kooboo
Criando um Leitor de Arquivos em ASP.NET
Criando um Leitor de RSS em ASP.NET
Trabalhando com Update Panel no ASP.NET
Como fazer Deploy no ASP.NET 4?
Enviando Emails com ASP.NET usando System.Net.Mail
Criando editor de texto personalizado em Asp.Net
JQuery auto complete em Asp.Net
Detectando erro a todo custo
Compactação de ViewState em ASP.NET
Criando e utilizando User Controls no Silverlight
Gerando JavaScript do lado do servidor com ASP.NET
Efeitos de imagem com ASP.NET e LightBox 2
Marca d´agua em imagens usando System.Drawing
Asp.Net + Twitter sem API de terceiros
Trabalhando com Accordion
Trabalhando com o componente TabContainer
Por que alguns grupos de usuários falham?
Suggest/Autocomplete com C#, Asp.Net e jQuery
Galeria de Imagens com C#, Asp.NET e jQuery
Recorte de Imagens com C#, Asp.NET e jQuery
Curso ASP.NET 3.5 em VB.NET e C# - Relatórios com Crystal Report
Curso ASP.NET 3.5 em VB.NET e C# - Distribuindo sua Aplicação
ModalDialogExtender
Curso ASP.NET 3.5 em VB.NET e C# - Eventos da aplicação
Produtos relacionados Topo
Pacote: Promoção C# Básico (válido somente para pagamento via boleto bancário)
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)
Pacote: Promoção Linq To SQL (válido somente para pagamento via boleto bancário)
Pacote: Promoção ASP.Net com Banco de Dados (válido somente para pagamento via boleto bancário)
Pacote: Promoção Linq + Asp.Net
CD/DVD: DVD de Treinamento E-Commerce com Visual Web Developer
CD/DVD: CD de Treinamento - Office SharePoint 2007 para Desenvolvedores WEB
CD/DVD: DVD de Treinamento - Crie uma aplicação ASP.NET com LINQ TO SQL
Livro: Desenvolvendo para web usando o Visual Studio 2008
CD/DVD: DVD de Treinamento Explorando o LINQ para SQL
Pacote: Pacote: Desenvolvedor Web Kit III (4 CDs)
Pacote: Pacote: Desenvolvedor Web Kit II (3 CDs)
Pacote: Pacote: Desenvolvedor Web Kit I (2 CDs)
CD/DVD: CD de Treinamento - RAD Studio 2007 e ASP.NET 2.0 (Delphi)
Pacote: Pacote ASP.NET - 4 CDs (Implementando AJAX em páginas ASP.NET 3.5 com o Visual Studio .NET 2008 + ASP.NET 2.0 Básico + Um mergulho no Controle GridView do ASP.NET 2.0 + Explorando as novidades)
CD/DVD: CD de Treinamento – Implementando AJAX em páginas ASP.NET 3.5 com o Visual Studio .NET 2008
CD/DVD: CD de Treinamento ASP.NET para Iniciantes - Visual Studio 2008
CD/DVD: CD de Treinamento sobre ASP.NET 2.0 Básico
CD/DVD: CD de treinamento: Um mergulho no Controle GridView do ASP.NET 2.0
E-Book: ASP.NET Ajax com C# e VB.NET (E-Book com entrega via download)
CD/DVD: CD de Treinamento sobre LINQ to SQL para iniciantes com Visual Studio .Net 2008
CD/DVD: CD de Treinamento Introdução a banco de dados com SQL Server 2005 Express
CD/DVD: CD de Treinamento Novidades das Linguagens C# 3.0 e VB 9 (Visual Basic 9)
CD/DVD: CD ASP.NET 2.0 - Atualização Rápida (Visual Studio .NET 2005)
CD/DVD: CD - Treinamento de ASP.NET 2.0 AJAX Extensions
CD/DVD: CD de Treinamento de ASP.NET 2.0 - Explorando as novidades
Livro: ASP.NET para desenvolvedores de web sites
Livro: ASP.NET Utilizando C# - De Programador para Programador
E-Book: E-Book: Tutorial de GridView no ASP.NET 2.0 (via download)
Livro: O Perfil do Gerente de Projetos Brasileiro
© 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.488
Artigos: 2.972
Cases: 14
Oportunidades: 4.546
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 Mobile com entrega via download (válido somente para pagamento via boleto bancário)
Promoção Mobile com entrega via download (válido somente para pagamento via boleto bancário)
De: R$ 189,00
Por: R$ 126,00
Promoção Wordpress + Tabless (válido somente para pagamento via boleto bancário)
De: R$ 149,70
Por: R$ 99,80
Promoção C# Básico (válido somente para pagamento via boleto bancário)
De: R$ 185,90
Por: R$ 136,00
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
CDs/DVDs
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
Recursos Visuais na Web com PHP
Ciência Moderna
De: R$ 49,00
Por: R$ 29,40
Crie um Sistema Web com PHP 5 e AJAX - Controle de Estoque
Erica
De: R$ 99,50
Por: R$ 84,50
Crie Projetos Gráficos com Adobe Photoshop CS4, CorelDRAW X4 e Adobe InDesign CS4 - em Português
Erica
De: R$ 77,50
Por: R$ 65,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
Alfred Reinold Baudisch
Luiz Felipe de Freitas
Robert Martim
Ramon Durães
Alessandro de Oliveira Faria
José Carlos Macoratti
Eric C M Oliveira
Os 10+ | Artigos do dia
HTML Básico
HTML Avançado
Criando aplicativos para o Orkut
Tutorial de Tabelas Dinâmicas no Excel – Parte 1
Excel: fórmulas matriciais
ASP.NET 2.0 - Explorando o GridView
Iniciando um projeto de Nota Fiscal Eletrônica - NFe
PL/SQL - Procedures e Funções
Excel: Comparando Listas
PHP: Formulários e upload de múltiplos arquivos e fotos