C#
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
MyServiceApp.ServiceContracts
MyServiceApp.ServicesImplementations
WcfClientConsole
WcfHostConsole
.gitattributes
.gitignore
dotnet-rethink-wcf.sln
netcore-rethink.png
readme.md

readme.md

logo

.NET Rethinking in Depth

WCF

A solution é composta por 4 projetos:

MyServiceApp.ServiceContracts

Destinado aos contratos (Interfaces e TO's dos serviços)

MyServiceApp.ServicesImplementations

Destinado à implementação dos serviços

WcfHostConsole

Destinado ao Host WCF

WcfClientConsole

Um exemplo de Consumo dos Serviços

Pontos de Atenção

  1. Projetos foram criados sob Full Framework (.NET 4.6.2) para exemplificar a hospedagem e consumo de serviços WCF. Esses conceitos de indireção podem ser usados com .NET Core, nas tecnologias suportadas pelo runtime escolhido.

  2. O desenho se propõem a não exemplificar a não utilização de Service References em cenários controlados em uma mesma empresa/equipe/projeto.

  3. MyServiceApp.ServiceContracts e MyServiceApp.ServicesImplementations compartilham o mesmo namespace mesmo estando em assemblies diferentes.

  4. No WcfHostConsole a lista Type[] services = new Type[] { typeof(TimeCalculatorService) }; é usada para demonstrar a capacidade de gerenciar múltiplos serviços, embora só expusemos 1.

  5. MyServiceApp.ServiceContracts é um pacote de contratos, compartilhado aqui como referência direta do projeto, mas poderia facilmente ser gerado um pacote nuget contendo esse assembly e assim ser compartilhado no NuGet.org, MyGet, File Server ou ainda em uma instância privada do Inedo Proget ou Nuget Server.

  6. Quebras nos contratos (remoção de parâmetros, mudanças nas TO's) possibilitam quebra de build.

  7. Cenários que usam injeção de dependência e inversão de controle são beneficiados com a possibilidade de trocar a utilização do serviço embarcado no AppDomain para um serviço remoto sem necessidade de refactoring.

  8. O fato dos consumidores dos serviços não saberem distinguir entre o que é WCF e o que não é, aumenta a flexibilidade sob as decisões de tornar ou não um serviço qualquer embarcado ou WCF. Ficaria a critério da configuração da aplicação, container IoC/DI.

  9. A hospedagem utilizando um Console Application é interessante, no entanto a utilização de serviços windows é melhor. Vale a pena olhar para o projeto TopShelf para saber mais sobre como trabalhar com serviços windows de uma forma mais organizada.

  10. Este exemplo está usando o post-build (Build Events) para copiar o binário que contém a implementação real,, para que facilmente possamos substituir implementação real de implementação com WCF, de forma transparente.

  11. Para consumir a implementação real, sem ferir a arquitetura, não há referência para o binário, apenas sua cópia para a pasta de binários, onde o AppDomain tentará fazer o load dos assemblies.