Friday, March 23, 2007

Microsoft TechDays - Dia 3

E eis-nos chegados ao terceiro desta edição do TechDays!

Deste ultimo dia, destaco estas duas apresentações, ainda na linha do que designei de W*F (aka, Windows "qualquer coisa" Foundation :)):

DEV020 - Extensibilidade do Windows Workflows Foundation com Custom Activities
DEV024 - Construir Serviços WCF com WWF - Presente e Futuro

E sobretudo estas duas, que gostei bastante:

DEV027 - LINQ - .NET Language Integrated Query Framework
DEV025 - Segurança na Windows Communication Foundation: objectivos, modelos, padrões e pontos de extensão

Cá seguem os meus resumos:

DEV020 - Extensibilidade do Windows Workflows Foundation com Custom Activities

O WWF foi lançado em Novembro/06 como parte do Windows Vista/.Net 3.0.

Nesta sessão foi relembrado o conceito de Workflow como implementação de processo ou lógica de negócio. Foi ainda relembrado o concieto de actividade, um passo no workflows (e/ou uma classe .Net)

Fazendo a analogia com a UI:
- workflow = form
- actividade = controls

As Custom Activities são escritas quando há necessidade de reutilização.

Como fazer uma Custom Activity:
- derivar da base-class Activity
- usar o namespace System.Workflows.ComponentModel

É possivel tirar partido do XAML.

Sequência do workflow: é colocada no ficheiro XOML (o editável do XAML), na forma de tags

A máquina de estados da actividade inclui o seguinte:
- Initialize()
- Execute()
- Cancel()
- Compensate()

Uma excepção no workflow é uma Fault, que é passada para a actividade Faulting, onde é depois tratada.

Uma actividade é single threaded, logo não convém colocar nada pesado no workflow.

Benefícios do WWF:
- transparência
- serviços
- modificação dinâmica

As actividades são unidades fundamentais de Execução, Reutilização e Composição.

DEV024 - Construir Serviços WCF com WWF - Presente e Futuro

O que é o WCF e o WWF? E o que não são?


- são Frameworks de desenvolvimento de vanguarda
- não são pensadas para trabalhar em conjunto, dado que foram desenvolvidas em paralelo
- não são produtos! São frameworks.

Arquitecturas sincronas:
- utilizam o paradigma pergunta-resposta
- não utilizam toda a funcionalidad WWF.
- dificuldades:
. passagem de parâmetros
. leitura/resposta
. sincronização de threads

Arquitecturas assíncronas:
- permitem usar todas as funcionalidades do WWF
- o WWF foi pensado para esta abordagem
- o que preciso ter mais?
. passo o id do workflow que quero executar (formas de passar o id: com cookies, soap header, customizada - ie, passo o id como parte da interface, mas não é uma boa solução - )
- mapeamento de inputs/outputs: External Data Exchange (construido para o SharePoint, é complexo de usar; válido mas limitado em termos de evolução futura; não vai ser abandonado)´

Como configurar uma External Activity:
- definir a interface
- criar um objecto que implementa a interface

Class MyFile PersistenceService: classe que permite guardar os dados em File System (ie, em suportes de dados persistentes)

WWF/WCF em .Net 3.5:
- duas novas actividades: send e receive (correlation tokens: associam a pergunta à resposta
- porque na versão 3.0 não é muito simples de implementar, a versão 3.5 traz algumas vantagens:
. queues (transparentes para o user)
. suporte a gestão de permissões
. suporte a conversações

Com o ORCAS (futura versão do Visual Studio) há problemas actuais que são resolvidos. A integração com o WCF e WWF passa a ser mais natural.

DEV027 - LINQ - .NET Language Integrated Query Framework

O LINQ é uma nova linguagem de query integrada na plataforma de desenvolvimento.


Não exige alterações à plataforma, mas às linguagens de programação (outra forma de fazer as coisas).

Efectua queries sobre objectos, e funciona com extensões ao C# 3.0.

Inovações no C# 3.0:
- inferência no tipo de variáveis locais
- expression tree
- tipos anónimos
- métodos de extensão

Os Standard Query Operators são os métodos disponiveis. Os Extension Methods podem ser utilizados acrescentando a referência de onde os métodos se encontram (ex.: System.Query).

Utiliza Deferred Query Execution, ie, a query só é executada quando tento iterar sobre os dados.

LINQ para SQL:
- actualmente:
. mando os dados da BD para um objecto (com open, datareader, etc...)
. desvantagens: pode haver incompatibilidades de data types (não há verificação em compile time)
- com o LINQ:
. os dados também são enviados para objectos
. as classes descrevem os dados (a classe é Strongly Typed)
. as tabelas são apenas colecções
. a ligação também é Strongly Typed (ex.: Northwind db = new Northwind(........);)
. a linguagem suporta sintaxe para queries

O ORCAS foi referido como facilitador para a integração com o LINQ.

Grande vantagem do LINQ: unifica o modelo de programação (não necessito saber XML, ou SQL, ou o que quer que seja, para aceder aos dados)

Outras vantagens:
- compile-time type checking
- intellisense

LINQ para XML:
- actualmente:
. modelo imperativo
. centrado no documento
. não tem querys integradas
. o DOM carrega tudo para memória (torna-se pesado)
- com o LINQ:
. centrado nos elementos
ex.:
xElement contacts = new xElement("contacts",
from c in customers
where c.Country = "USA"
Select new xElement("contact",
new xElement("nome", c.CompanyName),
new xElement("phone", c.CompanyPhone)
)
);
. modelo declarativo
. queries integradas
. menos código. E mais eficiente.

Principais caracteristicas:
- linguagem integrada de query (XPath, XQuery)
- melhor manipulação do DOM

Arquitectura LINQ:
- source implementa a IEnumerable (faz com que o código funcione à base de delegates, etc...)
- source implementa a IQueryable (gera uma árvore de objectos)

DEV025 - Segurança na Windows Communication Foundation: objectivos, modelos, padrões e pontos de extensão

Objectivos na troca de mensagens:

- confidencialidade
- autenticidade
- integridade
- autorização
- ...

Transporte vs. mensagem:
- segurança ao nivel da mensagem (XML-DSIG, XML-ENC, WS-*)
- segurança ao nivel do transporte (SSL, Kerberos, ...)
Ambos têm vantagens e desvantagens.

Segurança na WCF - é implementada ao nivel do channel Stack:
- Binding: define o formato da pilha de protocolos
. stack do cliente tem de igual ao stack do servidor
. não é no binding que defino o ssecurity token a usar (quem o define são os behaviors - clientCredentials, ServiceCredentials - ao nivel do Protocolo e do Transporte)
- authorization behaviors (definidos no Dispatcher, do lado do serviço)

Modos de binding:
- Transporte
- Mensagem (username, certificados X.509, Herberos, IssuedToken)
- Hibrido

Credenciais do cliente:
- ao definir as credenciais do cliente, defino também as credenciais do serviço
- qual escolher? Depende do cenário: Internet, Intranet, ambos, Federação

Componentes de um cenário de Autorização:
- Bindings
- Source Credentials
- ServiceAuthorizationBehaviors

Padrões de Autenticação:
- Arquitectura
- Desenho
- Implementação

WSSF - Web Service Software Factory:
- implementação de padrões para a WCF

NTLM: um protocolo de segurança que pode ser usado em alternativa ao Kerberos, mas é menos seguro => realça a importância de usar padrões, soluções testadas, em vez de usar configurações ad-hoc (exemplo de alteração de parâmetros de false para true, quando o Kerberos não funcionou. Passou a usar NTLM, baixando os niveis de segurança)

"O Admirável Mundo Novo" da Segurança:
- IdentityMetaSystem (entidades externas que verificam a identidade - IdentityProvider)
- a identidade é constituida por um conjunto de claims, transportadas em SecurityTokens, e representam uma identidade digital (como que um documento de identificação digital - tipo um BI digital, um Contribuinte digital, etc...)

Federação - um cenário mais complexo:
- posso criar uma cadeia de identity providers
- a comunicação é feita por WS-Trust
- como funciona:
. WSDL + WS-Policy (WS-MEX): para representar as politicas de segurança (obter metadata)
. WS-Trust: para enviar as mensagens (comunicar)

Pontos de extensão - autorização baseada em claims:
- claim: "the expression of a right with respect to a particular value"
- são implementadas em claimsets (o SecurityToken tem um claimset)

IdentityModel: utilizado para implementação de segurança com autorização baseada em claims

Pontos de extensão no WCF:
- validação de SecurityTokens (username tokens, validação de certificados X.509)
- definição de Thread.CurrentPrincipal (associação de roles)
- politicas de autorização
- SecurityTokens proprietários (Provider, Serializer, Authenticator)
- Canais de protocolos

No comments: