Conectando os pontos: integrando WPF, ASP.NET Core e gRPC
By Mirko Peters ·
Introdução ao desenvolvimento moderno com .NET: benefícios e desafios da integração. Você vê muitos benefícios quando integra WPF, ASP.NET Core MVC e gRPC no seu projeto…
Automatically translated with AI from the original post. Read the English original
![Cover: D365FO Integration Architecture with Anitha Eswaran [MVP-MCT]](https://d3wo5wojvuv7l.cloudfront.net/t_rss_itunes_square_1400/images.spreaker.com/original/79f1f9d5047eab2e63aaf331f8bd794c.jpg)
Introdução ao desenvolvimento moderno com .NET: integração
Benefícios e desafios
Você percebe muitos benefícios ao integrar WPF, ASP.NET Core MVC e gRPC em seus projetos. Essa abordagem oferece uma solução unificada para a comunicação entre desktop, web e serviços. O podcast Modern .NET Development Podcast, apresentado por Mirko Peters e com a participação do MVP da Microsoft Gábor Ruzsinszki, frequentemente destaca como essa integração ajuda você a construir aplicações modernas e escaláveis.
Veja a seguir uma tabela com os principais benefícios de combinar essas tecnologias:
| Benefício | Descrição |
|---|---|
| Desempenho | O ASP.NET Core está entre os frameworks web mais rápidos. Ele oferece suporte a HTTP/2 e gRPC para uma comunicação eficiente. |
| Escalabilidade | A integração permite que você crie microsserviços e APIs RESTful. Isso aumenta a escalabilidade das suas aplicações. |
| Recursos multiplataforma | WPF para desktop e ASP.NET Core para aplicações web oferecem a você uma experiência de desenvolvimento unificada em diferentes plataformas. |
Você também enfrenta alguns desafios. É preciso gerenciar a sincronização de dados entre WPF e ASP.NET Core MVC. Você deve garantir uma experiência do usuário consistente no desktop e na web. Segurança e autenticação se tornam mais complexas quando você usa gRPC no ASP.NET Core para a comunicação entre serviços. Você também precisa tratar o versionamento e as atualizações de cada parte da sua solução.
Dica: você pode usar bibliotecas compartilhadas para manter sua lógica de negócios consistente entre WPF, ASP.NET Core MVC e gRPC no ASP.NET Core. Isso reduz a duplicação de código e ajuda você a manter sua solução.
Cenários do mundo real
Você pode aprender muito com exemplos reais. Muitas organizações migraram aplicações WPF legadas para ASP.NET Core MVC e gRPC no ASP.NET Core. Essas migrações mostram como modernizar seu software e melhorar o desempenho.
Veja a seguir uma tabela com alguns exemplos:
| Organização | Detalhes da migração | Foco principal |
|---|---|---|
| Abto Software | Migrou uma ferramenta desktop de análise de saúde (WPF) para a web (Blazor WASM). 300 mil LOC. Manteve o motor de cálculo em C# (biblioteca compartilhada), mas reescreveu a interface. | O desempenho era crítico. |
| Amazon Q Developer | Transformou um aplicativo desktop exclusivo do Windows em uma aplicação web moderna e multiplataforma, usando como base exemplos existentes de desktop em WPF. | Tratamento de código legado complexo. |
Você pode começar com um aplicativo desktop WPF do qual seus usuários dependem todos os dias. Você quer alcançar mais usuários, então cria uma versão web usando ASP.NET Core MVC. Você usa gRPC no ASP.NET Core para conectar seus aplicativos desktop e web a serviços de back-end compartilhados. Essa estrutura permite reutilizar sua lógica de negócios e manter seus dados sincronizados.
Você também pode usar gRPC para conectar microsserviços na sua solução. O gRPC no ASP.NET Core oferece uma comunicação rápida e confiável entre serviços. Isso é importante quando você precisa de atualizações em tempo real ou de alto desempenho.
Quando você segue esses padrões de integração, cria soluções flexíveis e preparadas para o futuro. Você pode adicionar novos recursos, oferecer suporte a mais plataformas e escalar suas aplicações conforme suas necessidades crescem.
Evolução e modernização do .NET
Do .NET Framework ao .NET Core
Você viu o .NET mudar muito ao longo dos anos. A migração do .NET Framework para o .NET Core trouxe grandes melhorias para desenvolvedores e empresas. Ao usar o .NET 6 ou o .NET 7, suas aplicações rodam mais rápido e consomem menos memória do que nas versões anteriores. Você percebe uma taxa de transferência maior e tempos de execução menores, o que ajuda quando você cria aplicações web de alto tráfego. Mecanismos de execução otimizados e novos recursos de runtime tornam seu código mais eficiente. Cada nova versão traz mais velocidade e um gerenciamento de memória melhor. Você também pode implantar suas aplicações em diferentes sistemas operacionais, o que facilita o seu trabalho.
Aqui está uma tabela que mostra as principais diferenças em implantação e manutenção entre o .NET Framework e o .NET Core:
| Aspecto | .NET Framework | .NET Core |
|---|---|---|
| Flexibilidade de implantação | Limitado ao IIS ou ao Windows Server | Oferece suporte a implantações autocontidas e hospedagem na nuvem |
| Eficiência de custos | Exige licenciamento do Windows e hospedagem proprietária | Oferece suporte ao Linux, reduzindo custos de infraestrutura |
| Manutenção | Majoritariamente de código fechado, com atualizações limitadas | Código aberto, com suporte ativo da comunidade e atualizações frequentes |
| Melhorias de desempenho | Atualizações menos frequentes | Melhorias contínuas de desempenho e correções de segurança |
Multiplataforma e nativo para nuvem
Agora você pode criar e executar aplicações .NET no Windows, Linux e macOS. Essa flexibilidade multiplataforma oferece mais opções para implantação. Você pode usar microsserviços e contêineres para dividir suas aplicações em partes menores. Isso facilita escalar e atualizar suas soluções. A integração profunda com o Azure permite usar ferramentas e serviços criados para desenvolvedores .NET. Você também pode usar computação sem servidor com o Azure Functions, o que significa que você foca no seu código e não no gerenciamento de servidores. Esses recursos ajudam você a criar aplicações de alto desempenho e escaláveis que funcionam bem na nuvem. O ecossistema forte de desenvolvedores e as ferramentas modernas tornam seu trabalho mais rápido e confiável.
Modernização de aplicações legadas
Você pode ter aplicações legadas que precisam de atualizações para continuar úteis e seguras. Modernizar aplicações legadas começa com um plano claro. Primeiro, liste todas as suas dependências, como bibliotecas de terceiros e DLLs internas. Em seguida, procure padrões antigos, como páginas WebForms ou Forms Authentication. Verifique a qualidade do código e encontre partes fortemente acopladas ou APIs desatualizadas. Depois, decida se você quer reescrever partes da aplicação ou substituir bibliotecas antigas. Migre para tecnologias ASP.NET modernas, como Razor Pages ou ASP.NET Core MVC. Adote novas práticas, como injeção de dependência, testes automatizados e pipelines de CI/CD. Use ferramentas como o .NET Upgrade Assistant para ajudar no processo.
Modernizar aplicações legadas pode levar tempo e exigir recursos. Para um único aplicativo de negócios com 50.000 a 100.000 linhas de código, você pode gastar de quatro a seis meses. Os custos geralmente variam de US$ 100 mil a US$ 1 milhão, com mediana de cerca de US$ 180 mil. Se você gerencia um portfólio de aplicações legadas com muitos apps, o processo pode durar de dois a três anos, dividido em projetos menores. Você ganha melhor desempenho, segurança e manutenção mais simples quando moderniza seus sistemas legados.
Modernizar aplicações desktop WPF
WPF no desenvolvimento corporativo
Você usa o WPF para criar aplicações desktop rapidamente. O Visual Studio oferece ferramentas para desenhar e programar com facilidade. Muitas organizações escolhem o WPF porque ele simplifica a implantação. Você pode distribuir apps por meio de unidades compartilhadas ou instaladores ClickOnce. Isso torna o WPF um favorito para ferramentas internas e prototipagem rápida.
O WPF se destaca quando você precisa de alto desempenho gráfico e responsividade. Você lida com grandes volumes de dados ou visualizações complexas com o WPF. Ele se destaca como uma alternativa sólida às tecnologias baseadas na web.
A Microsoft continua desenvolvendo o WPF. Você vê novos recursos, como aceleração por hardware e o tema Fluent para design de interface moderno. O WPF se encaixa em aplicações críticas de linha de negócios em muitos setores. Você encontra o WPF em cerca de 500.000 a 1.000.000 de aplicações em desenvolvimento ativo no mundo. Você cria e implanta apps rapidamente com o WPF, precisando de menos configuração do que outras stacks tecnológicas.
Estratégias de migração
Com frequência, você precisa modernizar aplicações legadas do Windows Presentation Foundation. Você quer modernizar aplicações desktop WPF para aproveitar os novos recursos do .NET.
Migração para .NET Core/5+/6+/8+
Você começa fazendo o backup dos seus projetos. Instala o .NET Upgrade Assistant. Clica com o botão direito do mouse no projeto no Gerenciador de Soluções e seleciona Atualizar. Escolhe entre atualizações no local ou lado a lado. Define a versão de destino do framework e os componentes a serem atualizados.
Você prepara o ambiente com o Visual Studio 2019 e o .NET Core 3.0. Verifica a compatibilidade das APIs usando o .NET Portability Analyzer. Cria um novo arquivo .csproj para o seu projeto. Especifica o nome do assembly e o namespace padrão. Desativa a geração automática do AssemblyInfo.
Ferramentas que você usa na migração incluem:
- .NET
- Visual Studio 2022 v17.0+
- DevExpress Project Converter
- .NET Portability Analyzer
Uno Platform para multiplataforma
Você moderniza o WPF explorando soluções multiplataforma. O Uno Platform permite executar aplicativos semelhantes ao WPF no Windows, Linux, macOS, iOS, Android e WebAssembly. Você reutiliza sua lógica de negócios e seus componentes de interface. Alcança mais usuários e dispositivos com menos esforço. O Uno Platform ajuda a modernizar seus aplicativos de desktop para um público mais amplo.
Integração com ASP.NET e gRPC
Você moderniza aplicativos de desktop WPF conectando-os a tecnologias web e de serviços. Usa o ASP.NET Core para criar APIs web e interfaces de usuário. Usa o gRPC para uma comunicação rápida e confiável entre o seu aplicativo de desktop e os serviços de back-end. Compartilha a lógica de negócios entre WPF, ASP.NET e gRPC. Mantém seus dados sincronizados e melhora o desempenho. Moderniza seu fluxo de trabalho integrando o WPF às stacks modernas de web e serviços.
ASP.NET Core MVC para aplicativos Web
Visão geral do ASP.NET Core
Você usa o ASP.NET Core MVC para criar aplicativos web modernos, rápidos, seguros e fáceis de manter. Esse framework oferece uma forma unificada de criar interfaces de usuário web e APIs. Você pode executar seu aplicativo ASP.NET Core no Windows, Linux ou macOS. A natureza multiplataforma do ASP.NET Core significa que você pode implantar seus aplicativos em diversos ambientes, inclusive na nuvem.
Veja a seguir uma tabela com os principais recursos que tornam o ASP.NET Core MVC uma escolha sólida para o desenvolvimento web:
| Recurso | Descrição |
|---|---|
| Modelo de desenvolvimento unificado | Um único framework para interfaces web e APIs. |
| Escalabilidade | Arquitetura leve e modular, capaz de processar mais de 7 milhões de requisições por segundo. |
| Recursos de segurança | Proteção integrada contra CSRF, XSS e injeção de SQL, além de autenticação de nível empresarial. |
| Eficiência de desenvolvimento | Unifica MVC e Web API em um único modelo de programação, reduzindo a curva de aprendizado e a manutenção. |
| Flexibilidade de implantação | Natureza multiplataforma e excelente suporte a Docker para implantações consistentes em diferentes ambientes. |
| Base MVC | Utiliza o padrão arquitetural Model-View-Controller para uma separação clara de responsabilidades. |
Você começa a usar o ASP.NET Core instalando o .NET SDK e configurando seu primeiro projeto. O processo de configuração do ASP.NET Core é simples e bem documentado. Você pode usar o Visual Studio ou a linha de comando para criar seu projeto ASP.NET Core MVC.
Criando APIs
Você cria APIs com o ASP.NET Core MVC para conectar seus aplicativos web, aplicativos móveis e clientes de desktop. O framework oferece suporte ao design RESTful, o que ajuda a organizar seus endpoints e modelos de dados. Você pode usar controllers para processar requisições e retornar dados no formato JSON. Isso facilita o uso da sua API por outras aplicações.
Para criar APIs escaláveis e fáceis de manter, siga estas boas práticas:
- Estruture seu projeto usando Clean Architecture. Organize seu código com Controllers, Services, Repositories e Models ou DTOs.
- Use Async e Await para operações de I/O. Isso melhora o desempenho e permite que seu aplicativo atenda mais usuários ao mesmo tempo.
- Adicione tratamento global de exceções com middleware. Isso ajuda você a gerenciar os erros em um único lugar.
- Habilite o versionamento de API. Isso mantém suas APIs compatíveis com diferentes clientes.
- Use logging para rastrear erros e ações importantes.
Você pode conectar suas APIs ASP.NET Core MVC a outros serviços, como clientes gRPC ou WPF. Isso permite criar soluções poderosas que funcionam em diversas plataformas.
Segurança e autenticação
Você protege sua aplicação ASP.NET Core usando os recursos de segurança integrados. O framework protege contra ameaças comuns, como CSRF, XSS e injeção de SQL. Você pode adicionar autenticação e autorização para controlar quem pode acessar suas APIs. Muitos desenvolvedores usam tokens JWT para proteger endpoints e proteger dados sensíveis.
Você deve sempre manter sua aplicação ASP.NET Core atualizada. Atualizações regulares ajudam a corrigir problemas de segurança e a melhorar o desempenho. Você também pode usar middleware para gerenciar autenticação e autorização em toda a aplicação.
Dica: proteja suas APIs com autenticação forte e mantenha suas dependências atualizadas. Isso ajuda você a criar aplicações web seguras e confiáveis.
Opções de implantação
Você tem muitas formas de implantar suas aplicações ASP.NET Core MVC. Cada opção oferece benefícios diferentes. Você deve escolher a que se encaixa nas necessidades do seu projeto e nas habilidades da sua equipe.
1. Implantação local (on-premises)
Você pode implantar sua aplicação em seus próprios servidores. Esse método oferece controle total sobre o ambiente. Você instala o IIS (Internet Information Services) no Windows ou usa o Kestrel com um proxy reverso como Nginx ou Apache no Linux. Você mesmo gerencia atualizações, segurança e escalabilidade.
Dica: use o Kestrel para alto desempenho. Combine-o com Nginx ou Apache para lidar com HTTPS e balanceamento de carga.
2. Implantação na nuvem
Você pode implantar sua aplicação na nuvem. Escolhas populares incluem Microsoft Azure, Amazon Web Services (AWS) e Google Cloud Platform (GCP). Plataformas de nuvem oferecem escalabilidade fácil, alta disponibilidade e serviços gerenciados.
| Plataforma de nuvem | Principais recursos | Serviço de exemplo |
|---|---|---|
| Azure | Integração profunda com .NET, App Service, Functions | Azure App Service |
| AWS | Computação flexível, alcance global | AWS Elastic Beanstalk |
| GCP | Suporte a contêineres, VMs gerenciadas | Google App Engine |
Você pode usar o Azure App Service para implantar sua aplicação com apenas alguns cliques. Você envia seu código, e o Azure cuida do restante. Você também pode usar o Azure DevOps para implantações automatizadas.
3. Conteinerização com Docker
Você pode empacotar sua aplicação em um contêiner Docker. Esse método torna sua aplicação portátil e fácil de implantar em qualquer lugar. Você escreve um Dockerfile simples para definir o ambiente da sua aplicação.
FROM mcr.microsoft.com/dotnet/aspnet:8.0
COPY . /app
WORKDIR /app
ENTRYPOINT ["dotnet", "YourApp.dll"]Você compila e executa o contêiner localmente e depois o envia a um registro de contêineres. Você pode implantar contêineres no Kubernetes ou em serviços de nuvem como o Azure Kubernetes Service (AKS).
4. Integração contínua e entrega contínua (CI/CD)
Você pode automatizar o processo de implantação com pipelines de CI/CD. Ferramentas como GitHub Actions, Azure DevOps e GitLab CI ajudam você a compilar, testar e implantar sua aplicação automaticamente.
Observação: CI/CD reduz erros e acelera o ciclo de lançamentos. Você pode reverter alterações rapidamente se algo der errado.
5. Hospedagem multiplataforma
Você pode hospedar aplicações ASP.NET Core MVC no Windows, no Linux ou no macOS. Essa flexibilidade permite escolher o melhor ambiente para as suas necessidades.
Tabela resumo: opções de implantação
| Opção | Nível de controle | Escalabilidade | Facilidade de configuração | Ideal para |
|---|---|---|---|---|
| Local (on-premises) | Alto | Manual | Moderada | Controle total, conformidade |
| Nuvem | Médio | Automática | Fácil | Escalonamento rápido, menos configuração |
| Contêineres | Alto | Automática | Moderada | Portabilidade, microsserviços |
| CI/CD | Médio | Automática | Fácil | Lançamentos rápidos, automação |
Você deve avaliar seus requisitos antes de escolher um método de implantação. Cada opção tem seus pontos fortes. Você pode combiná-las para obter resultados ainda melhores. Por exemplo, você pode usar contêineres na nuvem com pipelines de CI/CD para implantações rápidas e confiáveis.
gRPC no .NET
O que é gRPC
Você usa o gRPC para criar comunicação rápida e confiável entre suas aplicações. gRPC significa Google Remote Procedure Call. É um framework de código aberto que permite chamar métodos em um servidor a partir de um cliente como se fossem locais. Você pode usar o gRPC em cenários de chamada remota de procedimento de alto desempenho. Isso significa que você envia e recebe dados rapidamente, mesmo quando suas aplicações rodam em máquinas diferentes.
O gRPC usa Protocol Buffers, uma forma neutra em relação a linguagem e plataforma de serializar dados. Você define os contratos dos seus serviços em um arquivo .proto. Esse arquivo descreve as mensagens e os serviços que você quer usar. Você gera o código do cliente e do servidor a partir desse arquivo. Você pode usar o gRPC em muitos tipos de aplicações, incluindo aplicativos desktop WPF, aplicações web ASP.NET e serviços de nuvem.
gRPC x REST
Você pode se perguntar como o gRPC se compara ao REST. O REST usa HTTP e JSON para enviar dados entre clientes e servidores. O gRPC usa HTTP/2 e Protocol Buffers. Isso oferece melhor desempenho, porque o HTTP/2 oferece suporte a multiplexação e streaming. Os Protocol Buffers criam mensagens menores que o JSON, então seus dados trafegam mais rápido.
Aqui está uma tabela para ajudar você a comparar gRPC e REST:
| Recurso | REST (JSON) | gRPC (Protocol Buffers) |
|---|---|---|
| Formato de dados | JSON | Protocol Buffers |
| Transporte | HTTP/1.1 | HTTP/2 |
| Desempenho | Bom | Melhor desempenho |
| Streaming | Limitado | Suporte completo |
| Contrato | OpenAPI/Swagger | Arquivos .proto |
Você escolhe o gRPC quando precisa de sistemas altamente escaláveis ou comunicação em tempo real. Você usa REST quando quer APIs simples que funcionem com navegadores. Muitos desenvolvedores usam os dois na mesma solução.
Configurando serviços gRPC
Você configura serviços gRPC no .NET em poucas etapas. Primeiro, você cria um novo projeto no Visual Studio ou com a CLI do .NET. Selecione o modelo "gRPC Service". Esse modelo fornece um arquivo .proto de exemplo e o código para iniciar seu serviço.
Você define seu serviço e suas mensagens no arquivo .proto. Por exemplo:
syntax = "proto3";
service Greeter {
rpc SayHello (HelloRequest) returns (HelloReply);
}
message HelloRequest {
string name = 1;
}
message HelloReply {
string message = 1;
}Compile seu projeto. As ferramentas geram classes C# para seu cliente e servidor gRPC. Você implementa a lógica do serviço em C#. Você pode hospedar serviços gRPC no ASP.NET Core ou até dentro de um aplicativo WPF para cenários avançados.
Para testar seus serviços gRPC, você usa ferramentas como grpc-dotnet, Grpc.Net.Client e Grpc.AspNetCore.Server. Essas bibliotecas ajudam você a criar, hospedar e consumir serviços gRPC no .NET. Você também pode usar o FINT para testar seus endpoints gRPC.
Você conecta seu cliente WPF ou aplicativo ASP.NET aos seus serviços gRPC adicionando o código de cliente gerado. Isso permite que seus aplicativos se comuniquem rapidamente e com segurança. Você pode migrar de tecnologias mais antigas, como o WCF, para o gRPC, obtendo uma solução moderna e escalável.
Dica: use gRPC quando precisar de comunicação rápida, confiável e altamente escalável entre seus aplicativos .NET.
Consumindo gRPC no WPF e no ASP.NET
Você pode conectar seus aplicativos WPF e ASP.NET Core a serviços gRPC. Isso permite compartilhar dados e lógica de negócios entre aplicativos de desktop e web. Você obtém uma comunicação rápida e confiável que funciona bem em soluções modernas.
Integração de cliente WPF
Você pode adicionar gRPC ao seu aplicativo de desktop WPF. Comece instalando o pacote NuGet Grpc.Net.Client. Esse pacote oferece as ferramentas para chamar serviços gRPC no seu projeto WPF.
Siga estas etapas para configurar um cliente gRPC no WPF:
Adicione o arquivo .proto
Coloque o arquivo.protodo seu serviço gRPC no projeto WPF. Defina a ação de compilação como "Protobuf" no arquivo de projeto.Instale os pacotes NuGet
Abra o Gerenciador de Pacotes NuGet. InstaleGrpc.Net.ClienteGoogle.Protobuf.Configure o cliente gRPC
Crie um canal e um cliente no seu código. Por exemplo:using Grpc.Net.Client; using Greet; var channel = GrpcChannel.ForAddress("https://localhost:5001"); var client = new Greeter.GreeterClient(channel); var reply = await client.SayHelloAsync(new HelloRequest { Name = "WPF User" }); MessageBox.Show(reply.Message);Trate a threading
Useasynceawaitpara manter a interface responsiva. Não bloqueie a thread principal.
Dica: você pode compartilhar modelos de dados entre seus projetos WPF e ASP.NET Core usando bibliotecas compartilhadas. Isso mantém seu código limpo e consistente.
Integração de cliente ASP.NET
Você também pode usar clientes gRPC nos seus aplicativos ASP.NET Core. Isso é útil quando seu aplicativo web precisa chamar outros serviços, como microsserviços ou APIs de back-end.
Veja como configurar um cliente gRPC no ASP.NET Core:
Adicione o arquivo .proto
Inclua o arquivo.protono seu projeto ASP.NET Core. Defina a ação de compilação como "Protobuf".Instale os pacotes NuGet
AdicioneGrpc.Net.ClientFactoryeGoogle.Protobufusando o NuGet.Registre o cliente gRPC
No seuStartup.csouProgram.cs, registre o cliente com injeção de dependência:builder.Services.AddGrpcClient<Greeter.GreeterClient>(o => { o.Address = new Uri("https://localhost:5001"); });Injete e use o cliente
Injete o cliente no seu controlador ou serviço:public class HomeController : Controller { private readonly Greeter.GreeterClient _greeterClient; public HomeController(Greeter.GreeterClient greeterClient) { _greeterClient = greeterClient; } public async Task<IActionResult> Index() { var reply = await _greeterClient.SayHelloAsync(new HelloRequest { Name = "Web User" }); ViewBag.Message = reply.Message; return View(); } }
Observação: você pode usar clientes gRPC em serviços em segundo plano, controladores ou em qualquer parte do seu aplicativo ASP.NET Core.
Agora você pode conectar seus aplicativos WPF e ASP.NET Core ao mesmo back-end gRPC. Isso oferece uma solução unificada e de alto desempenho para as necessidades do seu negócio.
Walkthrough Prático de Integração
Arquitetura da Solução
Você pode criar uma solução moderna conectando WPF, ASP.NET Core MVC e gRPC. Essa arquitetura ajuda você a entregar uma experiência integrada entre desktop e web. Você começa com um aplicativo desktop WPF. Em seguida, adiciona o ASP.NET Core MVC para a sua interface web. Por fim, usa o gRPC para conectar os dois clientes aos seus serviços de back-end.
Aqui está um diagrama simples para ajudar você a entender a estrutura:
| Camada | Tecnologia | Finalidade |
|---|---|---|
| Cliente Desktop | WPF | Interface de usuário rica para Windows |
| Cliente Web | ASP.NET Core MVC | Interface baseada na web para navegadores |
| Camada de Comunicação | gRPC | Comunicação rápida e tipada entre as camadas |
| Serviços de Back-end | ASP.NET Core | Lógica de negócios, acesso a dados e APIs |
Você pode usar essa configuração em muitos cenários. Por exemplo, pode modernizar um aplicativo WPF legado adicionando ASP.NET Core MVC e gRPC. Também pode criar soluções novas que precisem de clientes desktop e web. Essa arquitetura funciona bem para microsserviços porque o gRPC oferece comunicação de alta velocidade.
Dica: você pode compartilhar a lógica de negócios entre WPF, ASP.NET Core MVC e ASP.NET Core usando bibliotecas compartilhadas. Isso mantém seu código limpo e reduz a duplicação.
Criando um Serviço gRPC no ASP.NET Core
Você pode criar um serviço gRPC simples no ASP.NET Core. Esse serviço permitirá que seus clientes WPF e ASP.NET Core MVC se comuniquem com o back-end. Você começa abrindo o Visual Studio e criando um novo projeto. Escolha o modelo "gRPC Service". Esse modelo oferece tudo o que você precisa para começar.
Siga estes passos:
- Abra o Visual Studio e selecione "Create a new project."
- Escolha "gRPC Service" e clique em Next.
- Dê um nome ao seu projeto e selecione ASP.NET Core 8.0 ou posterior.
- Clique em Create.
Você verá um serviço de exemplo "Greeter" no seu projeto. O serviço usa um arquivo .proto para definir o contrato. Você pode editar esse arquivo para adicionar seus próprios métodos e mensagens.
Aqui está um exemplo de arquivo .proto:
syntax = "proto3";
service Greeter {
rpc SayHello (HelloRequest) returns (HelloReply);
}
message HelloRequest {
string name = 1;
}
message HelloReply {
string message = 1;
}Você implementa o serviço em C#. O modelo cria um arquivo GreeterService.cs. Você pode adicionar sua lógica ali.
public class GreeterService : Greeter.GreeterBase
{
public override Task<HelloReply> SayHello(HelloRequest request, ServerCallContext context)
{
return Task.FromResult(new HelloReply
{
Message = $"Hello, {request.Name}"
});
}
}Você executa seu projeto ASP.NET Core. O serviço gRPC fica aguardando as requisições dos clientes. Agora você pode conectar seus aplicativos WPF e ASP.NET Core MVC a esse serviço.
Observação: o gRPC usa HTTP/2, então certifique-se de que seu servidor oferece suporte a ele. O Visual Studio cuida disso para você quando você usa o modelo.
Consumindo gRPC no WPF
Você pode conectar seu aplicativo WPF ao serviço gRPC. Isso permite que o aplicativo desktop use o mesmo back-end do seu aplicativo web. Comece adicionando o arquivo .proto ao projeto WPF. Defina a ação de build dele como "Protobuf".
Siga estes passos para configurar o cliente:
- Instale os pacotes NuGet Grpc.Net.Client e Google.Protobuf.
- Adicione o arquivo .proto ao seu projeto.
- Crie um canal gRPC no seu código.
Aqui está um exemplo de trecho de código:
using Grpc.Net.Client;
using Greet;
var channel = GrpcChannel.ForAddress("https://localhost:5001");
var client = new Greeter.GreeterClient(channel);
var reply = await client.SayHelloAsync(new HelloRequest { Name = "WPF User" });
MessageBox.Show(reply.Message);Use async e await para manter seu aplicativo WPF responsivo. Você pode chamar os métodos gRPC a partir dos seus view models ou serviços. Essa abordagem permite compartilhar dados e lógica entre seus clientes WPF e ASP.NET Core MVC.
Dica: você pode reutilizar seus modelos de dados colocando-os em uma biblioteca compartilhada. Isso facilita manter os projetos WPF e ASP.NET Core MVC sincronizados.
Agora você tem uma solução em que WPF e ASP.NET Core MVC usam o gRPC para se comunicar com o back-end. Essa configuração oferece velocidade, confiabilidade e uma arquitetura moderna.
Contratos de Dados e Protobuf
Você define contratos de dados no gRPC usando Protocol Buffers, também conhecido como Protobuf. O Protobuf permite descrever a estrutura das suas mensagens em um arquivo .proto. Esse arquivo funciona como um contrato entre o cliente e o servidor. Você o usa para gerar classes C# que os dois lados entendem.
Ao adicionar um arquivo .proto ao seu projeto .NET, é preciso configurá-lo corretamente. A tabela abaixo mostra as principais configurações que você utiliza:
| Configuração | Descrição |
|---|---|
Include de <Protobuf> | Adiciona o arquivo .proto ao seu projeto. |
Atributo GrpcServices | Controla quais artefatos C# são gerados: Both, Server, Client ou None. |
Você deve manter seus arquivos .proto simples e claros. Use nomes claros para suas mensagens e campos. Evite palavras reservadas ou caracteres especiais. Sempre use números de versão nos nomes das mensagens ou dos pacotes se pretende atualizar seus contratos no futuro.
Aqui estão algumas práticas recomendadas para trabalhar com Protobuf no .NET:
- Coloque seus arquivos
.protoem uma pasta compartilhada ou biblioteca. Isso ajuda você a manter seus contratos sincronizados entre WPF, ASP.NET Core e outros projetos. - Use a opção
BothemGrpcServicesse quiser gerar código de cliente e de servidor a partir do mesmo arquivo.proto. - Mantenha seus tipos de dados simples. Use tipos básicos como
string,int32ouboolpara a maioria dos campos. - Adicione comentários aos seus arquivos
.proto. Os comentários ajudam outros desenvolvedores a entender seus contratos.
Dica: ao atualizar um arquivo
.proto, certifique-se de regenerar o código C# em todos os projetos que o utilizam. Isso mantém seu cliente e seu servidor sincronizados.
Tratamento de erros e logging
Você precisa de tratamento de erros e logging robustos para manter suas aplicações .NET confiáveis. Quando você usa WPF, ASP.NET Core e gRPC juntos, deve seguir algumas estratégias principais:
- Configure manipuladores globais de exceção tanto no ASP.NET Core quanto no WPF. Isso ajuda você a capturar erros que, de outra forma, poderiam passar despercebidos.
- Use logging centralizado. Isso facilita o rastreamento de problemas e a manutenção do seu código.
- No ASP.NET Core, use a interface
IExceptionHandlerpara tratar exceções em toda a sua aplicação. - No WPF, crie um manipulador global de exceções para capturar erros não tratados e registrá-los em log.
- Registre sempre eventos importantes, erros e avisos. Use ferramentas como Serilog, NLog ou os provedores de logging integrados.
- Garanta que seus logs incluam detalhes suficientes para encontrar e corrigir problemas rapidamente.
Observação: um bom tratamento de erros e logging ajuda você a identificar problemas cedo. Eles também tornam suas aplicações mais fáceis de dar suporte e de evoluir ao longo do tempo.
Autenticação e segurança
Protegendo serviços gRPC
Você precisa proteger seus serviços gRPC para proteger seus dados e usuários. Comece usando HTTPS em toda a comunicação gRPC. Essa etapa criptografa os dados entre seu cliente e seu servidor. Você também deve usar autenticação e autorização para controlar o acesso. Ao configurar autenticação e autorização, você decide quem pode chamar seus métodos gRPC e quais ações cada um pode executar. Você pode usar certificados ou tokens para verificar a identidade de cada cliente. Muitos desenvolvedores usam tokens JWT para isso. Sempre valide esses tokens no servidor antes de processar qualquer requisição.
Dica: use autorização baseada em funções para limitar o acesso a métodos gRPC sensíveis. Atribua funções aos usuários e verifique suas permissões antes de permitir que executem ações.
Autenticação no WPF e no ASP.NET
Você precisa implementar autenticação e autorização tanto nas suas aplicações WPF quanto nas ASP.NET. No ASP.NET, você pode usar middleware integrado para tratar autenticação e autorização. Esse middleware verifica as credenciais do usuário e aplica as regras de autorização a cada requisição. Você pode adicionar o recurso de autenticação/autorização configurando os serviços no seu arquivo Startup ou Program. No WPF, normalmente você se conecta a um serviço de backend para autenticação e autorização. O cliente WPF envia as credenciais do usuário ao servidor, que devolve um token se as credenciais forem válidas. Em seguida, o cliente usa esse token nas requisições futuras. Sempre armazene os tokens com segurança no lado do cliente.
A tabela abaixo mostra os métodos comuns de autenticação e autorização:
| Método | Descrição | Caso de uso |
|---|---|---|
| Tokens JWT | Tokens compactos e seguros para sessões sem estado | APIs Web, serviços gRPC |
| OAuth2 | Autorização delegada para acesso de terceiros | Integrações externas |
| Autenticação do Windows | Usa credenciais do Windows para autenticação | Ambiente corporativo interno |
Observação: sempre use armazenamento seguro para tokens em aplicações WPF. Nunca armazene dados sensíveis em texto simples.
Gerenciamento de tokens
Você precisa gerenciar os tokens com cuidado para manter suas aplicações seguras. Quando você usa autenticação e autorização, seu servidor emite um token após um login bem-sucedido. O cliente armazena esse token e o envia com cada requisição. Você deve definir tempos de expiração para os tokens a fim de reduzir o risco. Quando um token expira, o cliente precisa solicitar um novo. No ASP.NET, você pode configurar a duração dos tokens e a lógica de renovação. Para gRPC, sempre verifique o token antes de processar uma requisição. Se o token estiver ausente ou for inválido, negue o acesso usando suas regras de autorização.
Você também deve revogar os tokens quando um usuário fizer logout ou quando detectar atividade suspeita. Essa etapa impede acessos não autorizados. Revise regularmente a configuração de autenticação e autorização para garantir que ela atenda às suas necessidades de segurança.
Dica: automatize a renovação de tokens nos seus clientes para manter as sessões ativas sem interromper o usuário.
Implantação e Manutenção
Implantação em Múltiplas Camadas
Você pode organizar sua solução .NET usando uma implantação em múltiplas camadas. Essa abordagem separa a aplicação em camadas. Cada camada tem uma função específica. Por exemplo, você pode ter uma camada de apresentação com WPF ou ASP.NET Core MVC, uma camada de serviço para comunicação gRPC e uma camada de dados para o banco de dados. Essa estrutura ajuda a gerenciar o código e a escalar a solução.
Uma configuração típica em múltiplas camadas fica assim:
| Camada | Exemplo de tecnologia | Finalidade |
|---|---|---|
| Camada de apresentação | WPF, ASP.NET Core MVC | Interface do usuário |
| Camada de serviço | gRPC, Web API | Lógica de negócio e comunicação |
| Camada de dados | SQL Server, PostgreSQL | Armazenamento de dados |
Você implanta cada camada em servidores ou contêineres diferentes. Essa separação melhora a segurança e o desempenho. Você pode atualizar uma camada sem afetar as demais.
Dica: use gRPC na sua camada de serviço para conectar rapidamente e com confiabilidade as camadas de apresentação e de dados.
Pipelines de CI/CD
Você pode automatizar o build e o processo de implantação com pipelines de CI/CD. CI significa Integração Contínua (Continuous Integration). CD significa Entrega Contínua (Continuous Deployment). Esses pipelines ajudam você a entregar atualizações mais rapidamente e com menos erros.
Estas são as principais etapas de um pipeline de CI/CD:
- Você envia seu código para um sistema de controle de código-fonte, como GitHub ou Azure DevOps.
- O pipeline faz o build da aplicação e executa os testes.
- Se os testes passarem, o pipeline implanta a aplicação em um ambiente de teste ou de produção.
Você pode usar ferramentas como GitHub Actions, Azure Pipelines ou GitLab CI. Essas ferramentas oferecem suporte a projetos .NET, ASP.NET Core e gRPC. Você pode configurar implantações automáticas para seus serviços WPF, web e gRPC.
Observação: os pipelines de CI/CD ajudam a identificar problemas cedo. Você pode reverter alterações se algo der errado.
Monitoramento e Atualizações
Você precisa monitorar suas aplicações para mantê-las saudáveis. Ferramentas de monitoramento acompanham erros, desempenho e uso. Você pode usar Application Insights, Prometheus ou Grafana. Essas ferramentas funcionam com serviços .NET, ASP.NET Core e gRPC.
Você deve configurar alertas para eventos importantes. Por exemplo, você pode receber uma notificação se seu serviço gRPC falhar ou se sua aplicação web ficar lenta. Atualizações regulares mantêm seu sistema seguro e rápido. Você deve aplicar patches nos servidores, atualizar as bibliotecas e revisar os logs com frequência.
Uma lista de verificação simples para manutenção:
- Monitore todos os serviços, incluindo os endpoints gRPC.
- Configure alertas para erros e lentidão.
- Atualize o runtime do .NET e as bibliotecas.
- Revise os logs e corrija os problemas rapidamente.
Dica: agende janelas de manutenção regulares. Isso ajuda a aplicar atualizações sem interromper os usuários.
Melhores Práticas e Próximos Passos
Padrões de Projeto
Você melhora seus projetos .NET usando padrões de projeto consolidados. Esses padrões ajudam a escrever código fácil de entender, testar e manter. No desenvolvimento .NET moderno, é comum usar padrões como Injeção de Dependência, Repositório e MVVM (Model-View-ViewModel).
- Injeção de Dependência permite gerenciar as dependências entre classes. Você registra os serviços no código de inicialização e os injeta onde forem necessários. Esse padrão torna o código flexível e testável.
- Padrão Repositório separa a lógica de acesso a dados da lógica de negócio. Você cria classes de repositório para lidar com as operações de banco de dados. Isso mantém o código organizado.
- MVVM funciona bem em aplicações WPF. Você separa a interface, a lógica de negócio e os modelos de dados. Esse padrão ajuda a criar aplicações de desktop responsivas e fáceis de manter.
Dica: O podcast Modern .NET Development no m365.fm frequentemente mostra como esses padrões ajudam você a escalar suas soluções e a se preparar para mudanças futuras.
Estratégias de teste
Você precisa de estratégias de teste sólidas para entregar software confiável. Os testes ajudam você a identificar bugs cedo e garantem que seu código funcione conforme o esperado. No .NET, você usa diferentes tipos de testes:
| Tipo de teste | Finalidade | Ferramentas |
|---|---|---|
| Testes unitários | Testar pequenos trechos de código isoladamente | xUnit, NUnit, MSTest |
| Testes de integração | Testar como os componentes funcionam juntos | TestServer, WebApplicationFactory |
| Testes de interface | Testar interfaces de usuário e fluxos de trabalho | Selenium, Playwright |
Você escreve testes unitários para a lógica de negócio. Usa testes de integração para verificar como seus serviços e bancos de dados interagem. Para aplicações WPF e web, você adiciona testes de interface para garantir que a experiência do usuário continue fluida.
- Use desenvolvimento orientado a testes (TDD) para escrever os testes antes do código.
- Automatize seus testes em pipelines de CI/CD para obter feedback rápido.
- Use mocks para simular dependências e isolar seus testes.
Observação: os testes automatizados economizam tempo e reduzem erros durante as atualizações.
Documentação e colaboração
Você mantém seus projetos saudáveis ao escrever documentação clara e trabalhar bem com sua equipe. Uma boa documentação ajuda novos desenvolvedores a entender seu código. Ela também facilita a manutenção e a evolução das suas aplicações.
- Escreva arquivos README que expliquem a finalidade do projeto e os passos de configuração.
- Use comentários XML no código para descrever classes e métodos.
- Crie documentação de API com ferramentas como o Swagger para ASP.NET Core.
Você colabora melhor quando usa sistemas de controle de versão como o Git. Você acompanha alterações, revisa código e resolve conflitos em equipe. Habilidades de comunicação importam tanto quanto as técnicas. O podcast Modern .NET Development frequentemente discute como uma comunicação forte e uma documentação clara ajudam as equipes a ter sucesso, especialmente à medida que ferramentas de IA se tornam mais comuns no desenvolvimento.
Dica: Agende revisões de código regulares e compartilhe conhecimento com sua equipe. Essa prática leva a um código melhor e a uma equipe mais forte.
Recursos de aprendizagem
Você pode evoluir suas habilidades em desenvolvimento .NET usando uma variedade de recursos de aprendizagem. O ecossistema .NET muda rapidamente, então você precisa se manter atualizado com as ferramentas, frameworks e boas práticas mais recentes. Aqui estão alguns dos principais recursos que ajudam você a manter seu conhecimento atual e prático.
📚 Podcasts e programas recomendados
Modern .NET Development Podcast (m365.fm)
Ouça Mirko Peters e o MVP da Microsoft Gábor Ruzsinszki discutirem temas reais do .NET. Você recebe conselhos de especialistas sobre WPF, ASP.NET Core, gRPC e muito mais. O podcast aborda IA no desenvolvimento, habilidades de comunicação e os recursos futuros do .NET.Dica: assine o Modern .NET Development Podcast na sua plataforma favorita para receber atualizações regulares.
.NET Rocks!
Este programa traz entrevistas com líderes do setor. Você conhece novas tendências, ferramentas e técnicas em .NET.
📖 Documentação oficial e guias
Microsoft Learn para .NET
Você encontra tutoriais passo a passo, exemplos de código e lições interativas. O Microsoft Learn ajuda você a dominar desde WPF até ASP.NET Core e gRPC.Documentação do ASP.NET Core
Você encontra guias detalhados sobre como criar aplicações web, APIs e soluções seguras.Documentação do gRPC para .NET
Este recurso explica como configurar, usar e testar serviços gRPC no .NET.
🛠️ Comunidade e plataformas interativas
Stack Overflow
Você pode fazer perguntas e encontrar respostas de desenvolvedores .NET experientes. Pesquise soluções ou compartilhe o seu conhecimento.GitHub
Explore projetos .NET de código aberto. Você pode ler código, contribuir com repositórios e aprender com exemplos do mundo real.Microsoft Q&A
Este fórum permite que você se conecte com engenheiros da Microsoft e com a comunidade .NET.
📅 Conferências e eventos online
.NET Conf
Você pode assistir a sessões ao vivo e workshops. Conheça os lançamentos e recursos mais recentes do .NET.Encontros locais
Participe dos grupos de usuários .NET da sua região. Conheça outros desenvolvedores, compartilhe experiências e trabalhe em projetos em conjunto.
📝 Tabela: Referência rápida de recursos de aprendizado
| Tipo de recurso | Exemplo/Link | O que você ganha |
|---|---|---|
| Podcast | Modern .NET Development Podcast (m365.fm) | Insights de especialistas e histórias reais |
| Documentação | Microsoft Learn, documentação do ASP.NET Core | Tutoriais, guias e exemplos |
| Comunidade | Stack Overflow, GitHub, Microsoft Q&A | Perguntas e respostas, código e networking |
| Eventos | .NET Conf, Encontros locais | Aprendizado ao vivo e networking |
Observação: reserve um tempo toda semana para explorar novos recursos. O aprendizado contínuo ajuda você a se manter à frente no desenvolvimento moderno com .NET.
Você pode combinar esses recursos para construir uma base sólida. Experimente novas ferramentas, siga o conselho de especialistas e participe da comunidade .NET. Você vai melhorar suas habilidades e manter seus projetos modernos e eficientes.
Você aprendeu como conectar WPF, ASP.NET e gRPC para o desenvolvimento moderno com .NET. Viu passos práticos para migração, integração e segurança. Você pode usar o gRPC para criar comunicação rápida entre aplicações desktop e web. Você melhora seus projetos seguindo as melhores práticas apresentadas no episódio Modern .NET: WPF, ASP.NET Core, and gRPC with Gábor Ruzsinszki [MVP]. Você deve testar o gRPC na sua próxima solução. Você pode explorar o m365.fm para mais conselhos de especialistas.
Participe da comunidade .NET e experimente projetos de exemplo para desenvolver suas habilidades.
Perguntas frequentes
Qual é a principal vantagem de usar WPF para aplicações desktop?
Você pode criar interfaces de usuário ricas e responsivas com WPF. O framework oferece suporte a gráficos avançados e data binding. Você desenvolve aplicações desktop de nível empresarial de forma rápida e eficiente.
Como o ASP.NET Core melhora o desenvolvimento web?
Você obtém suporte multiplataforma e alto desempenho com o ASP.NET Core. O framework permite criar aplicações web e APIs seguras. Você implanta suas soluções no Windows, Linux ou macOS.
Por que você deve usar o gRPC para comunicação entre serviços?
Você alcança comunicação rápida e confiável entre serviços com o gRPC. O framework usa HTTP/2 e Protocol Buffers. Você reduz a latência e melhora a escalabilidade das suas aplicações.
É possível conectar WPF e ASP.NET Core usando gRPC?
Você integra WPF e ASP.NET Core usando gRPC. O framework permite que suas aplicações desktop e web compartilhem dados e lógica de negócios. Você cria soluções unificadas para as necessidades modernas do negócio.
Quais ferramentas ajudam a migrar aplicações .NET legadas?
Você usa o .NET Upgrade Assistant e o Visual Studio para a migração. Essas ferramentas analisam seu código e guiam você pelo processo de atualização. Você moderniza suas aplicações com menos esforço.
Como você protege seus serviços ASP.NET Core e gRPC?
Você protege seus serviços habilitando HTTPS e usando tokens de autenticação. Você implementa autorização baseada em funções para controlar o acesso. Você mantém seus dados seguros e seus usuários protegidos.
Onde encontrar conselhos de especialistas sobre desenvolvimento moderno com .NET?
Você pode ouvir o Modern .NET Development Podcast no m365.fm. O podcast traz exemplos do mundo real e dicas práticas. Você aprende com especialistas do setor e se mantém atualizado sobre novas tecnologias.
🎧 Ouça este episódio
Quer uma explicação prática sobre Modern .NET? Este episódio explica o tema em linguagem clara e mostra por que ele importa para Microsoft 365, Azure, Power Platform, segurança, IA e o trabalho moderno.
Ouça este episódio se você quiser:
- Entender os conceitos-chave por trás do Modern .NET
- Ver como ele se encaixa no ecossistema tecnológico mais amplo da Microsoft
- Descobrir onde ele pode gerar valor prático para sua organização
Você também pode gostar destes episódios relacionados do M365 FM:
- LINQ to SQL vs. EF Core para acesso a dados no .NET
- Extensibilidade no .NET e Clean Architecture com Miguel Castro [MVP]
- Modern Microsoft 365 Automation Beyond PowerShell Scripts
- Build AI Applications with .NET 10
- Improve Entity Framework Core Query Performance
Descubra mais conversas práticas sobre Microsoft no M365 FM.