terça-feira, 8 de fevereiro de 2011

Como hospedar serviços WCF no IIS

Para o IIS 6.0 é necessário um comando a mais que para o IIS 7.0

"%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_regiis" -i
"%windir%\Microsoft.NET\Framework\v3.0\Windows Communication Foundation\ServiceModelReg.exe" -i


Para no IIS 7.0 para Windows 64 bits é necessário adaptar o caminho


"%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_regiis" -i
"%windir%\Microsoft.NET\Framework64\v3.0\Windows Communication Foundation\ServiceModelReg.exe" -i

terça-feira, 1 de fevereiro de 2011

Hudson CI versus Jenkins CI

Kohsuke Kawaguchi criou o Hudson-CI quando trabalhava na Oracle, mas a mesma licenciou o software como livre, com a exceção do nome “Hudson” que é propriedade da empresa.

Depois que Koshuke mudou de empresa, ele e a maioria esmagadora dos desenvolvedores queriam mover o repositório do site Java.net para o Github por causa do baixo percentual de disponibilidade do primeiro e das migrações com outages. A Oracle não concordou. Por isso agora o há um novo branch do Hudson. O mantido pelo desenvolvedor original e pela maioria da comunidade se passará a chamar Jenkins. Como ainda não há diferença entre as duas versões, tanto faz escolher. Mas como o Jenkins provavelmente terá mais desenvolvedores eu pretendo utilizá-lo.

Linq e seu filho mais famoso Linq-to-SQL

Com o .NET 3.0 e com o C# 3.0 foram introduzidas extensões à linguagem C# que mudou a forma de programar de muita gente. Uma das adições é uma syntaxe parecida com o SQL:

    int[] numbers = { 1, 2, 3 };
    var numbersPlusOne =
        from n in numbers
        select n + 1;

Mas também foram adicionados os Extension Methods:

    int[] numbers = { 1, 2, 3 };
    var numbersPlusOne =
        numbers
        .Select(n => n + 1);

Antes o tipo int[] não possuía o método Array.Select(Func<T, TResult>). Mas esse método pôde ser adicionado sem modificações à classe original através dos Extension Methods. Note que os dois trechos de código acima são equivalentes, apenas escritos de forma diferente, ambos em C# 3.0.

Breve introdução ao Mapeamento Objeto-Relacional para .NET

Antes do Mapeamento Objeto-Relacional (ORM em inglês) automatizado surgir tínhamos que desenvolver nossas classes de acesso a dados manualmente.

Esta classe é responsável por:
  • expor métodos para consulta ou atualização do banco, e para cada um destes métodos:
  • serializar os parâmetros
  • gerar e executar o código SQL
  • deserializar o resultado
E pelo fato da linguagem SQL mudar de um SGBD para outro, se ela for gerada manualmente a migração de bancos ficava muito difícil. Com a introdução dos ORMs estas classes não precisam mais serem escritas nem precisamos nos preocupar com migração de bancos.

Os principais ORMs para .NET são
  • NHibernate (FOSS)
  • Linq-to-SQL (.NET 3.0)
  • Entity Framework 1.0 (.NET 3.5)
  • Entity Framework 4.0 (.NET 4.0)

O que é o Windows Communication Foundation (WCF)?

O WCF é uma biblioteca de comunicação introduzida a partir da versão 3.0 do .NET Framework que permite isolar a "implementação do serviço" do "protocolo de comunicação". Além de facilitar a serialização e deserialização dos dados, esta biblioteca também disponibiliza implementações intercambiáveis dos principais protocolos de comunicação. por exemplo:

  • TCP
  • HTTP - REST
  • SOAP
  • Named Pipes
  • Message Queues

O WCF exige que os dados a serem comunicados e os métodos de comunicação sejam definidos em tempo de compilação, mas os protocolos de comunicação, endereços, métodos de autenticação, métodos de serialização, método de criptografia e outros detalhes da comunicação podem ser definidos em tempo de execução. A configuração destes itens pode ser feita sem escrever código, pois para a maioria das opções mais populares basta apenas mudar uma entrada no arquivo de configuração.

Alguns protocolos no WCF foram implementados para a interoperabilidade com outras linguagens e plataformas de desenvolvimento, além de poderem ser consumidos por clientes implementados em .NET. O WCF também permite expor metadados sobre o serviço, facilitando o consumo destes.

Serviços que utilizam WCF podem rodar no IIS ou em aplicações normais, sejam elas de linha de comando, aplicações gráficas ou serviços do Windows. O WCF pode ser usado em vários cenários, permitindo uma rápida e eficiente implementação de:

  • comunicação entre processos da mesma máquina (ex: pipes nomeados)
  • webservices
  • web APIs
  • comunicação desconectada (ex: message queue, envie e esqueça)
  • comunicação bi-direcional (ex: assinatura e publicação)

O WCF também foi implementado no framework Mono, mas apenas parcialmente.