Self-Hosting com SignalR e integração via ASP.NET MVC

O ASP.NET SignalR é um framework de comunicação em tempo real que pode ser utilizado para diversas funcionalidades, inclusive para integração de comunicação entre sistemas de diferentes plataformas.

Caso não conheça o ASP.NET SignalR aprenda em detalhes neste artigo e nesta palestra.

Integração de Comunicação em Tempo Real com ASP.NET SignalR

O ASP.NET SignalR vem sendo amplamente utilizado em diversos cenários de comunicação em tempo real. Muitas vezes a própria solução Web implementa os Hubs e gerencia o recebimento e distribuição de mensagens.

Existem outros cenários em que é necessário desacoplar o lado server do SignalR da aplicação Web. Muitas vezes a informação a ser distribuída pode vir de outros serviços, outras plataformas e etc. É possível utilizar SignalR nesses casos? Sim, é possível!

O SignalR é implementado seguindo a especificação do OWIN e pode trabalhar em uma aplicação Web ou no modo Self-Host em um Windows Service ou aplicação console.

Proponho um cenário hipotético: Existem N broadcasts sendo distribuídos de diversas aplicações independentes da Microsoft e é necessário que a comunicação seja transmitida em tempo real para outras plataformas (Web, Desktop, Mobile). É necessário utilizar uma solução única para atender esta demanda e com baixo esforço de desenvolvimento.

Este cenário é muito similar ao da imagem utilizada no início do artigo e segue o fluxo a seguir:

  1. O Windows Service implementa uma forma de receber a comunicação vinda das demais aplicações.
  2. Os Hubs do SignalR no Windows Service distribuem as informações recebidas à todos os clientes conectados.
  3. Os clientes conectados recebem a comunicação em tempo real e se necessário podem encaminhar novas informações para o Windows Service.
  4. O Windows Service recebe as informações de um cliente e redistribui para todos novamente (como num chat).

Desenvolvi a solução deste cenário utilizando um Windows Service gerando dados de tempo, dados aleatórios de valores e trabalhando com uma comunicação via chat.

Aplicação ASP.NET MVC recebendo em tempo real as informações do Windows Service no Chrome e no Edge.

A solução está publicada em meu GitHub

  • Para testes de desenvolvimento não é necessário instalar o serviço (Windows Service), basta setar os dois projetos para iniciarem juntos e realizar um Debug.
  • É possível implementar autenticação para transmitir a comunicação apenas para clientes com a devida permissão.
  • É possível implementar algum Retry Pattern como o Polly caso haja alguma falha na entrega da comunicação.

Se você estiver interessado em conhecer mais e aprender como desenvolver aplicações Web com arquitetura baseada em DDD, aplicando os princípios SOLID, diversos Design Patterns e escrevendo testes de unidade inscreva-se em meu curso:


Vamos continuar a troca de experiências, deixe seu comentário abaixo, se gostou e concorda com o artigo compartilhe com seus colegas para transmitirmos o conhecimento para o máximo de pessoas possíveis. ;)

Como foi o ASP.NET Brasil Conference 2014

A comunidade ASP.NET Brasil em comemoração aos seus mais de 1.300 usuários realizou o evento chamado ASP.NET Brasil Conference 2014. Confira como foi.

O agitação do evento começou bem cedo, às 08h00 algumas pessoas já haviam chegado. Rapidamente o auditório que nos foi cedido pela PUC estava lotado, foi necessário colocar cadeiras extras para poder comportar mais pessoas, trabalhamos com a lotação máxima.

O propósito principal do evento foi entregar o máximo de conteúdo sobre ASP.NET de forma que os presentes pudessem aprender sobre recursos disponíveis e abrir os olhos e a mente para diversas possibilidades nesta plataforma.

Foram 6 palestras de conteúdo de alto nível, todas ministradas por MVPs em ASP.NET (7 no total), o que nunca tinha sido realizado antes num evento, foi algo inédito. Tivemos cerca de 122 participantes e o feedback sobre o evento foi melhor do que o esperado.

Todos os palestrantes apresentaram seus temas dentro do horário sem atrasos, houveram muitas perguntas, por sinal todas muito interessantes o que proporcionou um bate papo aberto entre participantes e os palestrantes que participaram das respostas não apenas na apresentação de seus temas e sim de forma geral, foi uma dinâmica muito boa.

Fomos prestigiados pela nossa MVP Lead Fernanda Saraiva que também esteve presente durante a apresentação dos temas.

Ao final do evento foram sorteados os prêmios, inscrições gratuítas para cursos promovidos por mim e pelo Waldyr Félix, além de livros sobre ASP.NET em português.
Foram coletados cerca de 150 kilos de alimentos que foram doados a instituições carentes.

As apresentações e os slides de todas as apresentações estarão disponíveis no site oficial do evento.

O evento foi todo organizado em cerca de um mês e foi a primeira edição de um evento que está programado para ser semestral. Para as próximas edições teremos muito mais novidades.

Gostaria de agradecer a todos os participantes e aos palestrantes que se comprometeram e entregaram ótimas palestras e ao Waldyr Félix que sem seu engajamento e esforço não teria sido possível realizar este evento.

Aguardem pelo próximo em breve. Ate lá!

Links

O Futuro do ASP.NET vNext – MVC 6

Você já parou para pensar no futuro do ASP.NET daqui alguns anos? O futuro chegou e foi anunciado hoje! Quem acompanha já deve ter reparado no termo OWIN ou lido algo sobre Project Katana / Helios, etc. Hoje uma página de 12 anos foi virada para um novo tempo. Conheça aqui o ASP.NET do Futuro.

ASP.NET vNext

O artigo é extenso e foi utilizada uma linha cronológica para apresentar todo o processo da evolução do ASP.NET.

Um breve olhar no passado do ASP.NET

O ASP.NET desde seu lançamento foi criado originalmente para dois publicos em específico:

  • Desenvolvedores ASP Clássico
  • Desenvolvedores Windows

O resultado não podia ser diferente, a primeira versão do ASP.NET conhecida como Web Forms é uma combinação do desenvolvimento Windows (componentes ricos, desenvolvimento rápido, arrastar e soltar) com a plataforma Web.

Para suportar toda a riqueza de funcionalidades do Web Forms foi necessário implementar muitas classes no .Net Framework, este que por sua vez é mono-bloco, ou seja, muitas funcionalidades estão acopladas em um único assembly, o System.Web (núcleo de objetos HTTP e o próprio framework de WebForms).

Devido a isso o ASP.NET sempre esteve fortemente acoplado ao .Net Framework e dependente de um específico Web host, o Internet Information Services (IIS).

O ASP.NET Web Forms foi a única forma conhecida de ASP.NET durante muitos anos.

Evolução da plataforma ASP.NET e suas dificuldades

Quem desevolve com ASP.NET desde seus primórdios sabe que antigamente era necessário muito tempo (ordem de anos) para que fosse liberada uma nova versão do ASP.NET, e isso nunca foi bom, pois as outras plataformas avançavam muito mais rápido, muitas novas tecnologias surgiam e o ASP.NET precisava se manter competitivo para atender as novas necessidades.

O grande ponto é que o ASP.NET sempre precisou crescer numa velocidade muito maior do que o .NET Framework cresce, porém ambos sempre estiveram muito acoplados através do System.Web que faz parte do .NET Framework, ou seja, muitas vezes para a implementação de um simples recurso no ASP.NET poderia haver algum impacto no .NET Framework e que por sua vez poderia demorar anos até receber a atualização para suporte a tal recurso.

Além do problema do alto acoplamento, por mais que o ASP.NET e o .NET Framework recebessem novas funcionalidades a adoção era demorada demais, o motivo maior é que as empresas não atualizam o .NET Framework de imediato, é necessário todo um processo de validação, revisão de plataforma, homologação e etc, até hoje em 2014 boa parte dos servidores de hospedagem não trabalham com a versão 4.5 do .NET Framework.

O desenvolvedor muitas vezes precisava esperar anos e anos para utilizar um novo recurso da plataforma.

Como resolver isso?

Solução número 1 – Separar

O ASP.NET MVC foi introduzido em 2007-2008 sendo que é distribuido separadamente do ASP.NET clássico, ou seja, isso aumentou a velocidade da entrega de novidades para o ASP.NET as versões do MVC foram entregues como complemento através de novas versões do Visual Studio, via NuGet ou via o aspnetwebstack do ASP.NET, onde é possível utilizar as versões dos build noturnos, código ASP.NET que foi desenvolvido a menos de 24 horas.

Quem desenvolve com ASP.NET há algum tempo vem nos últimos anos presenciando muitas mudanças, além do ASP.NET MVC ainda vieram o Razor, Web API, SignalR, SPA, ASP.NET Identity e todos foram distribuidos separadamente.

Existe a sensação que a Microsoft esta com grande foco em evoluir a plataforma ASP.NET, atualmente em média de a cada seis meses é liberada uma nova versão ou novas funcionalidades / tecnologias agregadas ao ASP.NET. para que ela se mantenha altamente competitiva entre as demais de mercado, e isso já é fato, analisando a produtividade em utilizar ASP.NET com Visual Studio e todas as vantagens que o ASP.NET oferece, fica muito claro o motivo pelo qual cada vez mais empresas e profissionais adotam o ASP.NET como plataforma oficial de desenvolvimento Web.

Para um maior detalhamento assista meu vídeo da palestra Novidades do ASP.NET MVC 5.x

Mesmo com a separação do ASP.NET MVC em relação ao ASP.NET clássico ainda existe uma forte dependência com o System.Web e por sua vez a necessidade de utilizar IIS como única opção de Host.

Quando iniciamos um projeto em ASP.NET MVC, por mais que seja um simples “Olá Mundo!” pode ser que não tenha reparado, mas as dependências com o System.Web estão lá, o System.Web provê suporte a envio de e-mail, controles do Web Forms, sessão e etc… Você não precisa disso? Não importa, vai ter que usar, pois se tirar o System.Web de suas referências seu projeto simplesmente não vai funcionar.

O outro problema é que por mais que o ASP.NET MVC tenha capacidade de ser uma plataforma leve e performática ela sofre uma boa perda devido ao fardo do System.Web que precisa estar presente para fazer o pipeline com o IIS.

Solução número 2 – Quebrar as dependências.

Em 2012-2013 surgiram o ASP.NET SignalR e ASP.NET WebAPI, estes dois componentes ASP.NET não possuem nenhuma dependência com o System.Web, foram desenvolvidos para levar o ASP.NET a um novo patamar, a da independência de plataforma, pois tanto o SignalR como o WebAPI podem rodar em ambientes não Microsoft (Linux/OSx).

Essa foi a quebra da independência ao legado do System.Web, mas até então apenas estes dois componentes podiam rodar independente do IIS, System.Web e Windows.

Foi neste momento que a comunidade técnica conheceu o OWIN.

Apresentando o OWIN

Desde meados de 2009 o ASP.NET se tornou open source e devido a este fato a comunidade técnica pode se juntar ao time de engenheiros da Microsoft para conhecer e implementar melhorias e sugestões. Foram os próprios membros da comunidade técnica que baseando-se no design do Node.js e do Rack da comunidade Ruby, criaram uma especificação chamada OWIN (Open Web Interface for .NET).

O OWIN define uma interface padrão entre servidores Web e aplicações .NET.
O objetivo da interface OWIN é desacoplar o servidor e a aplicação, incentivar a criação de módulos simples para o desenvolvimento em ASP.NET, e, por ser um padrão aberto, estimular o ecossistema open source de ferramentas .NET de desenvolvimento Web.

Resumidamente o OWIN é uma camada de abstração entre o server e a aplicação.

O objetivo do OWIN é que novos componentes possam ser facilmente desenvolvidos e consumidos, porém de forma agnostica, ou seja, que possam rodar em outras plataformas como Unix (Mac/Linux) e que possam ser portados de uma plataforma para outra sem necessidade de recompilação.

  • É um “standart” uma especificação.
  • Não existe exatamente como código ou componente.
  • É a descrição de como idealmente o comportamento de sua implementação deve funcionar.

Katana Project

É uma implementação Microsoft da especificação OWIN no ASP.NET.

A Microsoft apostou na proposta do OWIN e o implementou nos projetos ASP.NET SignalR e ASP.NET WebAPI, essa implementação recebe o nome de Katana Project. Mais tarde o ASP.NET Identity surgiu implementando bibliotecas do Katana Project também.

Além da Microsoft, outros projetos implementam OWIN como NancyFx, FubuMVC, NOWIN etc.

Confira no vídeo abaixo mais detalhes sobre arquitetura OWIN – Katana Project.

Project Helios

A implementação do OWIN atrávés do Katana Project proporcionou a criação de componentes ASP.NET muito mais leves, performáticos, independentes de plataforma e SelfHost, porém caso seja necessário contar com alguns recursos que o Host ASP.NET clássico (IIS) provê, tudo isso fica a cargo do desenvolvedor da aplicação.

O IIS apesar de trabalhar apenas no pipeline do ASP.NET clássico (System.Web) possui uma série de benefícios que nem sempre podem ser deixadas de lado:

  • IIS lida com gerenciamento da vida útil aplicação.
  • Ele pode suspender (em vez de encerrar) processos que estão ociosos para ajudar a equilibrar os recursos disponíveis do sistema.
  • IIS oferece um cache de modo de usuário embutido e pode comprimir automaticamente o conteúdo dos responses se for o caso.
  • IIS suporta filtragem de requests e transient worker process identities.
  • Mais de 10 anos de implementações e melhorias de segurança.
  • No cenário do Self Host você é responsável por muitas das responsabilidades que o IIS toma conta, além disso ele já existe para isso por que não utilizá-lo?

São esses os motivadores do Project Helios, porém devido à necessidade do IIS trabalhar no pipeline no System.Web muita performance seria perdida, por isso o Project Helios trabalha apenas com o “Core” do IIS o utilizando como uma espécie de API, o “Core” do IIS é extremamente rápido e poderoso, pois disponibiliza apenas as suas funcionalidades sem depender do pipeline do ASP.NET clássico (System.Web).

O Project Helios oferece suporte aos projetos desenvolvidos em Katana (OWIN), porém não é dependente dele para ser utilizado, é possível desenvolver uma aplicação baseada apenas em Project Helios que rodará apenas no padrão IIS e não terá opções de SelfHost e multiplataforma, em uma arquitetura de aplicações para Windows pode ser muito vantajoso, pois é pelo menos 96% mais rápido que o ASP.NET clássico. Na demo exibida no vídeo abaixo o resultado foi quase 6x mais rápido utilizando Helios.

Requerimentos mínimos para utilização do Project Helios

  • Windows 8 ou Windows Server 2012
  • .NET Framework 4.5.1
  • Visual Studio 2012 ou 2013

Resumo Cronológico

O ASP.NET desde seu lançamento sofreu com a grande demora de liberações de novas versões, algumas plataformas novas surgiram e passaram a frente devido uma evolução mais rápida, com a implementação do ASP.NET MVC esse tempo de liberações diminuiu, porém a plataforma ainda era limitada em relação às outras devido a herança historica do Web Forms (System.Web) em seu pipeline, impedindo que algumas melhorias fossem implementadas.

Com o surgimento do OWIN e os projetos Katana e Helios novas frentes se abriram e a engenharia do time de ASP.NET começou a trabalhar em uma nova versão, a maior e melhor mudança do ASP.NET em todo o seu período de existência, hoje o futuro chegou.

ASP.NET vNext – MVC 6

Foi anunciado dia 13/05 durante uma sessão do TechEd North America 2014 a nova versão do ASP.NET chamada vNext e que vai mudar tudo o que você sabe sobre ASP.NET, é um novo paradigma, um novo stack, tudo que os desenvolvedores Web mais maduros sabiam que era possível e torciam para que um dia fosse feito.

Todos os nomes que vimos como Katana, Helios e ASP.NET vNext provavelmente irão mudar, são nomes dados para projetos em execução, na versão final ganham um outro nome mais familiar.

Você desenvolvedor ASP.NET veterano, levante agora da cadeira e aplauda, você está diante a maior mudança do ASP.NET em seus 12 anos de existência. Você iniciante ASP.NET nem pense em Web Forms, caia direto nesse stack e comece a entender tudo como funciona daqui pra frente.

O que mudou

  • Web Pages, MVC, Web API agora é uma coisa só, chamado de MVC 6
  • Novas versões otimizadas para nuvem do MVC 6, SignalR 3 e Entity Framework 7
  • Acabou a dependência do System.Web, MVC 6 agora é um middleware, leve e performático, agora apenas o Web Forms depende (para sempre) do System.Web.
  • Versões otimizadas para nuvem do MVC, Web API, Web Pages, SignalR e Entity Framework.
  • Maior portabilidade, não existe dependência de assemblies do GAC facilitando o deploy em nuvem e em ambientes não Windows (Linux/OSx/Etc)
  • Possibilidade de hospedar sua aplicação no IIS ou em um processo self hosted
  • Injeção de dependência nativa dentro do framework
  • Suporte ao legado do Web Forms, MVC 5, Web API 2, Web Page 3 , SignalR 2 e EF 6
  • Deploy do runtime e framework com a sua aplicação, possibilitando rodar lado a lado 2 versões diferentes do framework
  • Arquivo project.json irá integrar o arquivo de projeto (.csproj), o packages.config e o Nuget specifications (nuspec);
  • Suporte ao Rosyln, ou seja, não precisa mais parar a aplicação para alterar uma classe, basta alterar salvar e dar F5 no browser, pronto! Muita produtividade!
  • Tudo é entrege via NuGet até o runtime!
  • Mais open source que nunca (foi para o GitHub) e faz parte do .Net Foundation.
  • Baixissimo consumo de memória
  • Completamente Multiplataforma!!! Rode ASP.NET onde quiser!

Veja alguns screenshots

Assista ao vídeo da palestra – O Futuro do ASP.NET + Novidades do vNext – MVC 6

Acompanhe os slides da palestra

Assista esse vídeo exibindo como rodar a nova versão do ASP.NET vNext – MVC 6

Bons estudos!!!

Referências

Vamos continuar a troca de conhecimentos, escreva seu comentário abaixo 😉

ASP.NET BRASIL CONFERENCE – São Paulo

O grupo ASP.NET BRASIL qual faço parte e atuo no time de líderes está organizando um evento épico sobre ASP.NET no dia 10/05, um formato inédito, 6 MVPs de ASP.NET dividindo o mesmo palco no mesmo dia, confira como participar.

ASP.NET BRASILO Grupo ASP.NET BRASIL em comemoração pelos seus mais de 1.000 participantes ativos realizará este evento gratuíto, e para falar de ASP.NET nada melhor do que reunir 6 MVPs de ASP.NET não acham?

Horário Palestrante Tema
08:00 – 09:00 Credenciamento  
09:00 – 09:30 Abertura  
09:30 – 10:20 Alexandre Tarifa (MVP) Construindo sites Mobile com ASP.NET
10:30 – 11:20 André Baltieri (MVP) Desenvolvendo APIs RESTful com Web API
11:30 – 12:20 Eduardo Pires (MVP) O Futuro do ASP.NET
12:30 – 14:00 Almoço  
14:00 – 14:50 Fabrício Sanchez (MVP) Breve
15:00 – 15:50 Victor Cavalcante (MVP) ASP.NET Identity o substituto do Membership
16:00 – 16:50 Waldyr Félix (MVP) Novidades do ASP.NET MVC 5.X
17:00 – 18:00 Encerramento Sorteio de Prêmios

Para participar basta levar 1kg de alimento não-perecível que será doado para instituições carentes.

10 de Maio – Sábado – PUC-SP – Departamento de Computação
Rua Marquês de Paranaguá 111 – Consolação – 01303-050

Faça sua inscrição e divulgue para seus conhecidos
https://www.sympla.com.br/aspnet-brasil-conference—sao-paulo—presencial__19070 

Site do Evento
http://aspnetbrasil.azurewebsites.net/ 

Inscreva-se no grupo ASP.NET BRASIL
https://www.facebook.com/groups/aspnetmvcbr

Sorteio de Prêmios

Serão sorteadas duas inscrições gratuítas para os cursos:

Os prêmios serão sorteados apenas para os cadastrados pelo site e que estiverem presentes até o final do evento.

Comprovante de Participação

Todos os presentes receberão comprovante de participação eletrônico que será enviado por e-mail.

Inscrição Rápida

As vagas são limitadas, por favor, em caso de desistência realize o cancelamento via site ou nos comunique sobre o cancelamento da inscrição.

*Grade sujeita à mudanças.

Campus Party 2014 – Palestra sobre ASP.NET

No dia 31/01 eu tive o prazer de palestrar na Campus Party 7 – Edição 2014 / SP meu tema foi sobre ASP.NET, novidades, tendências e mobilidade.

Para quem não sabe a Campus Party é o maior evento tecnológico do mundo, ela atrai anualmente geeks, nerds, empreendedores, gamers, cientistas e muitos outros criativos que reúnem-se para acompanhar centenas de atividades sobre Inovação, Ciência, Cultura e Entretenimento Digital.

Foi o maior evento onde palestrei, fico muito satisfeito em ter palestrado no mesmo evento que meu ídolo Bruce Dickinson 😉

Motivos não faltaram para eu compilar e buscar compartilhar o máximo de informações possíveis sobre a plataforma ASP.NET, minha palestra foi na virada da madrugada, mas mesmo assim o público foi chegando e quando notei a audiência estava ótima!

Ao finalizar minha apresentação o retorno também foi ótimo, recebi muitos feedbacks positivos, tirei bastante dúvidas e conversei com o pessoal que ficou para continuar o assunto comigo fora do palco.

Disponibilizo para visualização os slides que utilizei em minha palestra.

Com certeza estarei de volta na Campus Party ano que vem, espero que me apresentando novamente também.

Acompanhe e conheça mais o evento no site oficial da Campus Party.

Abraços!

Ebook – Guia .Net para Aplicações Corporativas.

Guia .Net para Aplicações Corporativas (título traduzido) é um e-Book gratuito com um conteúdo muito recente e atualizado, ideal para arquitetos e desenvolvedores que desejam ampliar os conhecimentos sobre abordagens e tecnologias disponíveis para construir aplicações corporativas modernas.

Guia .Net para Aplicações Corporativas

Fiz o download desde e-Book hoje, já li cerca de 40% e estou gostando o suficiente para compartilhar com vocês. Confira o conteúdo:

.NET Technology Guide for Business Applications

  1. Key takeaways
  2. Purpose of this guide
    • WHO SHOULD USE THIS GUIDE
    • HOW TO USE THIS GUIDE
  3. Overview
    • THE NET FRAMEWORK AND THE FUTURE OF DEVELOPMENT
  4. Emerging application patterns
    • DEVICES
      • Native applications for Windows devices
      • Web applications for any device
    • SERVICES
    • CLOUD AND HYBRID-CLOUD
    • END-TO-END SCENARIOS IN EMERGING APPLICATION PATTERNS
      • Scenario: Connected Native Windows Store Applications
      • Scenario: Modern Web Applications for Any Mobile Device (Tablets and phone)
  5. Established application patterns
    • BUSINESS APPLICATIONS SEGMENTATION BY PRIORITIES
    • SMALL AND MEDIUM-SIZED BUSINESS APPLICATIONS
      • Data-centric web business applications
      • Scenario: End-to-End Small/Medium Web Business Applications
      • Mixed approach for small/medium business web applications
      • Data-centric desktop business applications
      • Scenario: Small/Medium 2-Tier Desktop Application
      • Scenario: Small/Medium 3-Tier Desktop Applications
      • Modernizing desktop business applications
      • Modernizing applications based on RIA containers
    • CLOUD APP MODEL FOR OFFICE AND SHAREPOINT
      • Apps for Office
      • Scenario: Connected Apps for Office
      • Apps for SharePoint
      • Scenario: Connected Apps for SharePoint
    • LARGE, MISSION-CRITICAL BUSINESS APPLICATIONS
      • NET in large, mission-critical and core-business applications
      • Technology selection for large mission-critical and core-business applications
      • Scenario: Large, Core-Business Applications
      • Approaches and trends for long-term core-business applications
      • Loosely coupled architecture and the dependency-inversion principle
      • Architectural styles for core-business applications
      • Modernizing mission-critical enterprise applications
      • Scenarios for custom large, mission-critical applications
      • Scenario: Domain-Driven Subsystem (Bounded Context)
      • Scenario: CQRS Subsystem (Bounded Context)
      • Scenario: Communicating Different Bounded Contexts
      • NET Technology Guide for Business Applications
      • Scenario: Modernizing Legacy Mission-Critical Enterprise Applications
  6. Conclusions
    • Appendix A: Silverlight migration paths
    • Appendix B: Positioning data-access technologies

O download está disponível neste link. (PDF 6.02 MB)

Referencias

Boa leitura a todos!

MVC Summit 2013

O MVC Summit é um evento anual, gratuito e online, 14 palestras sobre ASP.NET e Web foram transmitidas ao vivo e estão disponíveis para exibição no Youtube.

MVC Summit

No último sábado (27/07) ocorreu o MVC Summit 2013, um evento anual e online, organizado pelo André Baltieri e Victor Cavalcante.

Neste ano o formato do evento foi alterado, o Google Hangouts foi utilizado para transmissão online. O MVC Summit 2013 contou com 2 trilhas (MVC e Web) onde alguns dos grandes nomes da comunidade palestraram sobre ASP.Net e Web Standards.

A minha palestra foi sobre ASP.Net SignalR, para ter acesso as minhas demos e slides acesse o conteúdo deste outro artigo: Palestra sobre ASP.Net SignalR + Demos + Vídeo

As palestras foram transmitidas ao vivo mas foram todas gravadas pelo Youtube e estão disponíveis abaixo:

Trilha MVC

Parte 1

Parte 2

Parte 3

Trilha Web

Parte 1

Parte 2

Acesse o site do MVC Summit 2013
http://www.mvcsummit.com.br

Meus agradecimentos aos organizadores e todos os espectadores que assistiram, interagiram e deixaram seu feedback. Até a próxima edição.

Palestra sobre ASP.Net SignalR + Demos + Vídeo

Palestra sobre ASP.Net SignalR ministrada no Visual Studio Summit 2013.

ASP.Net SignalR

Desde que comecei a estudar ASP.Net SignalR me interessei muito e se tornou um dos meus assuntos favoritos, acompanhe aqui como foi minha palestra:

Vídeo da Palestra

Eu ainda não sou o bom palestrante que desejo ser, mas um dia chego lá 🙂

Slides

Demos (compatíveis com VS 2012)

*Jogo da velha original foi baixado aqui. Fiz melhorias, correções e complementos para demonstração.

Quer conhecer mais sobre ASP.Net SignalR? Leia o meu artigo aqui.

O Visual Studio Summit é um dos maiores eventos sobre desenvolvimento na plataforma Microsoft, assista todas palestras da edição 2013 aqui.

Deixe seu feedback logo abaixo 🙂
Abraços!

Vou palestrar no evento de 10 anos do Codificando.Net

Olá Pessoal,

O Codificando.Net é uma das maiores comunidades de desenvolvedores de software e está comemorando seus 10 anos com um evento presencial.

O evento terá diversas apresentações sobre Desenvolvimento Web, SQL, Business Intelligence e Cloud Computing.

O tema da minha palestra será Comunicação em tempo real usando ASP.NET SignalR

Esta é mais uma ótima oportunidade de aprender, conhecer as novidades, fazer contatos e trocar conhecimentos com a comunidade técnica.

Informações

O dinheiro arrecadado com as inscrições do evento, cobrirão o coffee-break e a compra de alimentos não perecíveis para doação à instituição de caridade (à definir).

Espero você lá!

 

ASP.NET SignalR – Introdução e Utilização

O ASP.NET SignalR é uma biblioteca open-source que facilita a implementação de comunicação em tempo real, atualizações/notificações de forma assíncrona em uma aplicação.

Foi desenvolvido por dois funcionários da Microsoft – Damian Edwards e David Fowler, todo o código fonte do projeto está disponível no GitHub

Há um certo tempo foi incorporado pela plataforma ASP.Net, sendo:

ASP.Net SignalR

Funciona através de uma biblioteca Server Side (ASP.Net) e uma Client Side (Javascript), é suportado em aplicações do tipo Silverlight, Windows Phone 7 e 8 e WinRT. Veja a lista completa de plataformas suportadas aqui.

Quem já precisou desenvolver uma aplicação real-time conhece as dificuldades de manter um certo volume de conexões do servidor, manipular a maneira que o servidor trata as requisições, garantir que o client esteja exibindo as informações no tempo certo e enfim.

Existem alguns meios de implementar uma comunicação em tempo real (Long Polling, WebSockets, Node.js) todas essas técnicas/tecnologias possuem sua complexidade ou limitação técnica, o SignalR propõe a facilitar a implementação da comunicação real-time em sua aplicação.

O que é uma aplicação real-time?

É uma aplicação onde a informação chega em tempo real, imagine um chat ou um ticker de cotação da bolsa de valores, essas informações estão sendo distribuídas em tempo real para todos os clientes consumidores da aplicação.
Para se desenvolver uma aplicação em tempo real é necessário que o servidor seja capaz de sensibilizar todos os clientes conectados assim que uma informação chegar.

Como funciona?

O ASP.Net SignalR é uma abstração de uma conexão, ele trabalha por baixo dos panos definindo o melhor tipo de transporte em dois níveis diferentes de abstração o que ocasiona uma impressão de uma conexão persistente.

ASP.Net SignalR

Transportes

Um dos grandes pontos do ASP.Net SignalR é sua capacidade de gerenciar a escolha do tipo de transporte a ser utilizado.

Como mostra a figura existem quatro tipos de transportes disponíveis:

  1. WebSockets
  2. Long Polling
  3. Server Sent Events
  4. Forever Frame

Lendo a documentação do ASP.Net SignalR iremos entender que fica a cargo dele encontrar o transporte mais eficaz entre um server/client, dando sempre preferência por WebSockets quando disponível e caso não esteja disponível parte para Long Polling e os demais em sequência.

WebSocket é uma tecnologia que permite a comunicação bidirecional por canais full-dulplex sobre um único soquete Transmission Control Protocol (TCP). Ela foi projetada para ser executada em navegadores e servidores web que suportem o HTML5, mas pode ser usado por qualquer cliente ou servidor de aplicativos. A API WebSocket está sendo padronizada pelo W3C e o protocolo WebSocket está sendo padronizado pelo IETF.

Sendo assim apesar de termos tipos de transportes variantes o código fonte é sempre o mesmo, a responsabilidade de escolher o tipo de transporte fica por conta do SignalR, porém existe disponível uma maneira de definir o uso de um transporte específico.

Comunicação com PersistentConnection e Hubs

O ASP.Net SignalR oferece dois níveis de abstração de comunicação entre clientes e servidores, sendo o Hubs de alto nível e PersistentConnection de baixo nível.

PersistentConnection representa um endpoint de comunicação com um único destinatário, agrupamentos ou mensagens de broadcast.
É necessário a configuração de uma rota customizada dentro do arquivo Global.asax.

A API de conexão (representada em código .Net pela classe PersistentConnection) dá ao desenvolvedor acesso direto a comunicação de baixo nível que o SignalR expõe, similar a forma de trabalhar com Sockets. O modelo de comunicação PersistentConnection será familiar para os desenvolvedores que usam API’s baseadas em conexão como o Windows Communcation Foundation – WCF.

Hubs é um pipeline de mais alto nível construído sobre a API PersistentConnection  e que permite que o cliente e servidor chamem métodos entre si diretamente.
O SignalR lida com o envio através dos limites da máquina, permitindo que o cliente chame os métodos no servidor tão facilmente como métodos locais e vice-versa.
Se o seu aplicativo usa diferentes tipos de mensagens é recomendável que você use a classe Hub, de modo que você possa chamar métodos no client em vez de enviar uma mensagem explícita que precisa ser recebida, interpretada e posta em prática. Usando o modelo de comunicação Hubs será familiar para os desenvolvedores que usam API’s de invocação remota como. NET Remoting.

A escolha de um modelo de comunicação

A maioria dos aplicativos deve usar o modelo Hubs.
PersistentConnections podem ser utilizados nas seguintes circunstâncias:

  • O formato da mensagem enviada necessita de ser controlado.
  • O desenvolvedor prefere trabalhar com um modelo de envio de mensagens ao invés de um modelo de invocação remota.
  • Um aplicativo existente que usa um modelo de mensagem está sendo portado para usar SignalR.

Como começar?

É necessário o Visual Studio 2010 SP1 ou o Visual Studio 2012

  • Inicie um projeto ASP.Net MVC
  • Instale o ASP.Net SignalR através do Nuget:
Install-Package Microsoft.AspNet.SignalR
  • Adicione um Controller vazio
public class ChatController : Controller
{
    public ActionResult Index()
    {
        return View();
    }
}
  • Crie uma View
@{
    ViewBag.Title = "Chat Básico";
}
<label for="apelido" >Seu Apelido:</label><input type="text" name="apelido" id="apelido" /><br />
<label for="mensagem" >Mensagem:</label><input type="text" name="mensagem" id="mensagem" maxlength="100" />
<div id="chatWindow" style="width: 100%; height: 300px; overflow: scroll; border: 1px solid grey"></div>

<!-- Referenciando os scripts adicionados ao Bundle -->
@Scripts.Render("~/bundles/jquery")
@Scripts.Render("~/bundles/SignalR")

<!-- Referencia para o script de Hub criado automaticamente -->
<script src="/signalr/hubs" type="text/javascript"></script>

<script type="text/javascript">
    $(function () {
        // Declarando um proxy de referencia ao Hub
        var chatHub = $.connection.chat;

        // Criando a função que será chamada pelo Hub para distribuir as mensagens aos clientes.
        // Por convenção as chamadas aos métodos são feitas em "camelCase"
        chatHub.transmitirMensagem = function (apelido, msg) {

            // Area do chat
            var chatWin = $("#chatWindow");

            // Publicando a mensagem no chat
            chatWin.html(chatWin.html() + "<b>" + apelido + "</b>: " + msg + "<br />");
        };

        // Iniciando a conexão com o Hub
        $.connection.hub.start();

        // Validando o botão enter
        $(document).keypress(function (e) {
            if (e.which == 13) {

                // Chamando o método de transmissão de mensagem no Hub
                chatHub.enviarMensagem($("#apelido").val(), $("#mensagem").val());

                // Limpando o texto da mensagem.
                $("#mensagem").val("");
            }
        });
    });
</script>
  • Crie um Hub
public class Chat : Hub
{
    public void EnviarMensagem(string apelido, string mensagem)
    {
        Clients.TransmitirMensagem(apelido, mensagem);
    }
 }

Este exemplo está disponível para download aqui.

Ao executar o projeto abra uma segunda instância de um browser (experimente browsers diferentes) e teste a conversação do chat.

ASP.Net SignalR

É incrivelmente fácil, não é mesmo?
O client chama métodos no Hub (server) como se fossem métodos locais e os métodos no server chamam métodos no client como se fossem métodos no servidor.

Quero conhecer e aprender mais!

Leia estes dois sites:

Assista este ótimo vídeo que foi gravado no TechEd 2012 por um dos desenvolvedores do  ASP.Net SignalR.

Leia este Free eBook do MVP JM Aguilar, eu já li e recomendo (inglês)

Mais exemplos para baixar:

Baixou o código fonte e teve alguma dúvida? Colocou a mão na massa e quer conhecer algum detalhe mais profundamente? Os desenvolvedores do ASP.Net SignalR respondem, eles ficam disponíveis neste chat, eu dei meu alô para eles e fui respondido:

ASP.Net SignalR

O exemplo do chat é o mais simples e clássico para usar na comunicação em tempo real, porém as possibilidades de utilização são inúmeras, adicione o ASP.Net SignalR em seu conhecimento técnico e faça proveito.

Este foi um post introdutório, falarei muito mais deste assunto em outros artigos, estou preparando uma aplicação especial para disponibilizar na comunidade utilizando ASP.Net SignalR e também tem minha palestra no Visual Studio Summit 2013 (será gravada e disponibilizada aqui).

Dê seu feedback e tire suas dúvidas nos comentários abaixo.
Gostou deste artigo? Compartilhe 😉

Referências