WCF Starter's Roadmap

Por eventualmente ser de interesse para quem pretende iniciar o estudo do WCF, resolvi fazer este post. A ideia é identificar quais são os requisitos desejáveis para serem WCF starters e, de seguida, apresentar alguns recursos que considero de qualidade para quem deseja aprofundar conhecimentos na matéria:

Requisitos:

- Programação em .NET, especialmente componentes, usando interfaces, atributos, genéricos, threading, herança e transacções.
- Bons conhecimentos de arquitecturas distribuídas, em especial usando web services e/ou remoting e queuing, WSE e/ou .ASMX, COM e/ou DCOM.
- Conhecimentos dos core standards usados em web services: REST, JSON, XML, XML Namespaces, XML Schemas, WSDL, WS-Addressing.
- Conhecimentos funcionais de standards WS-*, particularmente WS-Security, WS-Reliable Messaging, WS-Transactions e WS-Trust.
- Compreensão de conceitos ligados a SOA: Orientação a Serviços, Messaging, Concorrência, Transacções Distribuídas, P2P, Federação, Single Sign-On.
- Familiaridade com design patterns como proxy, broker, publish-subscriber, data transfer object, adapter, façade e singleton.
- Muita vontade de aprender a usar a software factory template para desenvolvimento de serviços mais avançada que existe.

Recursos:

- Windows Communication Foundation Hands-On, Craig McMurtry, SAMS, 0672328771. Este livro é bastante acessível para quem começar a ler os primeiros textos sobre WCF. Não sendo exaustivo em nenhum tópico, apresenta o mérito de incluir um pouco de informação sobre cada tema relacionado com esta tecnologia, diversidade esta que nem sempre encontrei em outras fontes: P2P, CardSpace, Federação, REST, Custom Behaviors, Custom Transports, etc.
- Programming WCF Services, Juval Löwy, O'Reilly Media, 0596526997. Ainda só disponível em "Rough Cuts" na O'Reilly, este é provavelmente o melhor livro disponível até à data. Bastante orientado a aspectos práticos e com muitos exemplos de código reutilizável em projecto. A não perder: todos os exemplos de código disponível no site IDesign.net. Não comecem a desenvolver/testar uma nova funcionalidade a partir do zero, i. é, sem procurar se existe já um exemplo feito. Usando um exemplo como template temos acesso a um excelente ramp-up.
- Windows SDK. Disponibilidade obrigatória como Programmer's Reference no dia-a-dia.
- http://wcf.netfx3.com/. Site da comunidade de WCF. Aqui temos acesso a apresentações, artigos, vídeos, webcasts, podcasts, exemplos de código e até acesso a fazer um Hands-On Labs on-line. Aqui, sugiro começarem por ler os whitepapers referidos e depois ver alguns videos, por exemplo.
- WCF Forum. Este é o forum a ter em conta sobre WCF. Seguido atentamente por elementos da equipa de desenvolvimento, é fácil colocar uma dúvida que seja respondida rapidamente.
- Finalmente, o recurso mais importante: nós próprios! Não há *nada* que substitua a experimentação sucessiva e metódica das features e o passar por problemas em projecto participando na sua resolução. Isto quer dizer que devem tentar equilibrar o que vão lendo e ouvindo, com o que vão fazendo.

Com isto, espero ter ajudado alguém a iniciar-se no tema. Comentários, dúvidas e/ou sugestões, just say it.



Published Wednesday, January 31, 2007 8:18 PM by António Cruz
Filed under , ,

Comments

 

lneves said:

Obrigado pelas dicas, tenho apenas uma dúvida, porque haveria alguém de se tornar um "WCF starter"?

Qual é o benefício de ter WCF na nossa "toolbox"?

O que é que se ganha em relação a WSE (Web Services Enhancements)?

February 1, 2007 12:07 PM
 

Hugo Pais Batista said:

Olá António

Embora compreenda que tenhas mencionado requisitos "desejáveis", acho alguns requisitos um pouco "drásticos" para quem se quer tornar um "WCF starter". Tenho noção de que aquilo que pretendes/pretendemos explorar no WCF é e será mais do que a maioria da audiência developer que o WCF atingirá e até compreendo parte dos requisitos que mencionas.

Poderemos vir a entrar aqui numa pseudo-religiosa troca de argumentos, mas não acho que nem metade dos programadores que irão usar WCF precisarão de dominar ou ter conhecimentos de coisas como REST, JSON, WS-Trust, WS-Transactions, Federação, etc.

Deixa-me apenas reforçar que até entendo o que queres dizer, porque eu pertenço ao grupo que sabe que devemos ter estas bases para fazer um bom trabalho. No entanto, alteraria o termo "WCF Starter" para "WCF I Know the Under the Hoods Starter" :)

Podemos entrar aqui na velha discussão sobre o Assembler ou as linguagens de alto nível e se devemos ou não saber Assembler para perceber o que é feito por baixo. Já tivemos oportunidade de o discutir, e concordo que o ideal era que todos tivessemos contacto com o Assembler na academia, mas acredito veemente na abstracção de layers e optimização de processos.

Para mim, um developer comum de WCF, precisa de ter mais contacto com padrões como Dependency Injection ou Inversion of Control, do que propriamente WS-Addressing ou qualquer outra especificação "maçuda".

Já tive a oportunidade de no passado ler várias especificações WS-*, relê-las, e reve-las e confesso que não sei o que me deu mais prazer: ver um episodio da Floribela ou ler qq uma destas especificações.

Quero com isto dizer há coisas com as quais não devíamos nos ter que preocupar. Infelizmente temos que o fazer porque a industria nao se organizou de forma a nos abstrair desse problema. Ter que saber como sistemas interligados comunicam é o mesmo que ter que saber qual é o codigo maquina que o meu compilador gera para interagir com o meu hardware. É ter que conhecer um HAL (Hardware Abstraction Layer) mesmo que eu so queira fazer uma calculadora a funcionar em qualquer sistema embarcado.

Por ultimo, o WCF é enorme. Dá para fazer de tudo. É tão extensível como a nossa imaginação. Por isso.. um WCF starter só vai tocar na api de 1º nível... e poucos serão os que tocam nos layers mais abaixo...

De qq das formas reforço: conhecer todos esses standards/ferramentas/padrões é importante. Mas não seria tão drástico ao ponto de o considerar desejável para um WCF Starter ;)

um abraço

February 1, 2007 12:08 PM
 

António Cruz said:

lneves,

O WCF é actualmente o framework mais versátil e desenvolvido que podemos usar para implementar serviços.

Dito isto, há muita coisa que podemos fazer apenas com .ASMX, como sejam serviços compliant com o Basic Profile 1.1, da mesma forma que com Enterprise Services e .NET 2.0 podemos suportar transacções distribuídas, ou usar MSMQ para ter queuing e com WSE implementar WS-Security.

O WCF apresenta-se como um unified programming model em relação a todas as tecnologias anteriores, incluindo DCOM e remoting, além das que mencionei. A avantagem imediata para o programador é a de que não precisa de deambular em várias APIs. Existe um single programming model de serviços(System.ServiceModel).

Esta é a vantagem imediata que podes retirar da migração para WCF. Em segundo lugar, em termos de features, de administração e de suporte a standards, o WCF é uma proposta mais evoluída que as tecnologias anteriores. Esta apresentação dá um enquadramento das tecnologias anteriores em relação ao que é o WCF: http://wcf.netfx3.com/files/folders/teched_2006_chalk_talks/entry6680.aspx.

Olá Hugo,

Tens razão, o rol de requisitos que enunciei pode parecer exagerado para um starter. A minha ideia é no entanto apenas identificar uma wish-list de nice-to-haves, mais do uma lista de exigências sem as quais nem vale a pena tentar.

Quanto a ser ou não necessário saber disto ou aquilo, a tua opinião -e a minha- serão sempre condicionadas por aquilo que já experimentámos e necessitamos no dia-a-dia. No meu trabalho actual por exemplo, é importante conhecer JSON e REST. Em relação a standards, existem leituras menos maçudas, concordo, mas por isso mesmo referi "conhecimentos funcionais" e, para isso, basta ter umas ideias "do que é e para que serve". Provavelmente daqui a mais alguns anos a convergência dos standards e de interesses da indústria colocará estas especificações no patamar de entendimento que hoje temos do assembly, mas essa não é a realidade actual e (como bem sabes) a capacidade de fazermos debug on-the-wire e entender o que falta ou está errado com o XML é decisivo para o sucesso das implementações na maioria dos casos.

Muito obrigado aos dois pelos comentários e pela questões pertinentes que colocaram.

António Cruz

February 1, 2007 12:45 PM
 

João Pedro Martins said:

Apesar de já terem algum tempo, achei bstt interessantes os videos do Mike Taulty nos Nuggets da MS UK:

http://www.microsoft.com/uk/msdn/events/nuggets.aspx

Tem 16 vídeos sobre WCF, entre 10 e 20 minutos.

(nota: tb há vídeos feito pelo mesmo moço, sobre WWF, que tb vale a pena ver)

February 1, 2007 1:49 PM
 

João Pedro Martins said:

Já agora, só outro comentário, apesar de isto não estar directamente on-topic: o WCF é poderoso, é verdade, mas é tudo menos simples. Este post exprime o que penso sobre o assunto:

http://devhawk.net/2007/01/16/Mastering+WCF.aspx

«However, if "ease of development" was a goal for WCF, it doesn't look like it was high on the list. And frankly, that's fine. As I've written before, I'd rather have a flexible if complicated low-level foundation to build higher-abstracted application infrastrucutre on top of.

Just don't try and sell me that WCF is making my life easier, because it's not. Not yet, anyway.»

February 1, 2007 1:52 PM