Desenvolvimento - Visual Basic .NET
Migração de .NET Remoting para WCF
Mostrarei alguns pontos importantes que devem ser observados para uma migração de .NET Remoting para Windows Communication Foundation (WCF), bem como a analise da necessidade de migração.
por Leonardo Bruno Bentes LimaUma das maiores decisões foi a forma de comunicação entre as camadas da aplicação. Tinha que decidir entre o .NET Remoting e Web Service, e resolvi usar a primeira opção como padrão e Web Service como forma auxiliar em algumas situações. Não vou entrar no mérito da escolha, mas o fato é que com a breve chegada do .NET 3.0 e conseqüentemente do WCF, devo me preocupar com a "inevitável" migração.
Queria deixar claro que a migração não é compulsória, já que uma aplicação .NET Remoting pode funcionar em paralelo com uma WCF dentro do mesmo Application Domain.
Uma aplicação .NET Remoting, possui basicamente um Client, um assembly compartilhado entre o Server e o Client e um host que oferece o serviço. Caso você já use uma implementação baseada em interfaces, o que é aconselhável, a coisa fica bem mais simples. Basta adicionar os atributos do Namespace System.ServiceModel (<ServiceContract> e <OperationContract>). E se o tipo de ativação for Server Side (Singleton ou SingleCall), essa é única coisa que precisa ser feita em termos de codificação no server. No arquivo de configuração, temos que fazer uma alteração, como mostro abaixo:
<configuration> <system.runtime.remoting> <!-Pode deixar como está --> </system.runtime.remoting> </configuration> <system.servicemodel> <services> <service name="MeuServer.MeuServico"> <endpoint address="net.tcp://meusite.com/MeuServico" binding="netTcpBinding" contract="IMeuServico" /> </service> </services> </system.servicemodel> </configuration>
O próximo passo é criar o host como mostro abaixo:
Dim oMeuHost as new ServiceHost(Gettype(MeuServico)) oMeuHost.Open()
E fazer umas pequenas alterações no Client, como no arquivo de configuração:
<system.servicemodel> <client> <endpoint name=" MeuServico" address="net.tcp://meusite.com/MeuServico" binding="netTcpBinding" contract="IMeuServico" /> </client> </system.servicemodel> </configuration>
E no código da aplicação client, devemos trocar a forma de criação do objeto para ficar dessa forma:
Dim ChFact as new ChannelFactory(Of IMeuServico)(" MeuServico") Dim oMS as IMeuServico = ChFact.CreateChannel()
Já podemos dizer que a aplicação já está pronta para usar o WCF. Agora vejamos mais algumas considerações.
Custom objects: Caso você transporte custom objects entre as camadas de sua aplicação, é necessário fazer uma pequena alteração. Você terá que colocar o atributo <DataContract> em todas as classes que irão ser transportadas, bem como o atributo <DataMember> nos métodos e propriedades que você deseja que sejam vistas pelo WCF.
Exceptions: Por padrão, as exceptions que retornadas pelo server, serão enviadas como CommunicationException, o que obviamente não é prático para você tratar. Para evitar isso, decore as interfaces com o atributo <ServiceBehavior(ReturnUnknownExceptionAsFaults=True)>, dessa forma, as exception serão retornadas como FaultException, e você poderá receber informações mais detalhadas das exceptions e tratá-las de acordo.
Conclusão
Como mostrei, é fácil (embora trabalhosa para aplicações grandes) fazer a migração de .NET Remoting para WCF. Mas você deve analisar se a migração vale a pena de verdade. Para isso pese algumas coisas, como:
- Sua aplicação necessita de interoperabilidade? Se sim, o WCF é com certeza a melhor solução;
- Sua aplicação necessita de um incremento na segurança? Se sim, o WCF é infinitamente mais robusto do que o .NET Remoting nesse quesito;
- Sua aplicação utiliza algum mecanismo para gerenciar transações em ambiente distribuído? Se sim, não tenha dúvida quanto a migração;
Enfim, depois de analisar todas as suas necessidades e estudar as funcionalidades e recursos do WCF e decidir migrar, saiba que não será difícil fazer isso, desde que a sua implementação do .NET Remoting esteja da forma que apresentei, caso você use ativação no cliente (Client Activation) e não utilize interfaces, seu trabalho será bem mais complexo, mas em muitos casos valerá a pena.
Até a próxima.
- Entity Framework 4: Repositório GenéricoVisual Basic .NET
- As edições 14 da Easy .net Magazine e 88 da .net Magazine já estão disponíveis.ADO.NET
- Postando no Twiiter com .NET e Migre.meC#
- Setup ApplicationsVisual Basic .NET
- Problemas na manipulação de arquivos do MS Excel com .NETVisual Basic .NET