# .Net Remoting

É uma API da Microsoft para comunicação entre processos lançada em 2002 com a versão 1.0 do Framework .NET. É uma evolução da família COM que agora foi substituída pela WCF.

# WCF (Windows Communication Foundation)

WCF é conjunto de tecnologias (também visto como uma API) lançada com o Framework .NET da Microsoft para comunicação entre processos em múltiplas máquinas em uma rede. Inicialmente possuía o codinome “Indigo”, e está disponível hoje nas versões mais atuais dos sistemas operacionais da Microsoft, como Windows Vista e Windows Server 2008 e também é suportado em versões anteriores como Windows XP e Windows Server 2003.
A API utiliza o modelo de programação orientado a serviços construído sobre o Framework .NET e a base de sua arquitetura é baseada na arquitetura dos Web services.
O objetivo principal do WCF é facilitar e agilizar a programação de Web services para comunicação entre processos, seja em uma mesma máquina, em uma LAN ou (principalmente) pela Internet.

## Arquitetura baseada em Web services

WCF utiliza a arquitetura dos Web services como base para sua arquitetura. O uso de XML para definição dos dados, SOAP para troca de mensagens e WSDL para definição dos serviços é fruto desta associação.
Ele também implementa diversos padrões do conjunto de padrões dos Web services, como o WS-Addressing (para endereçamento de um serviço), WS-ReliableMessaging (para trocar de mensagens de maneira confiável) e WS-Security (para segurança).

## Funcionamento
### Comunicação

Para comunicação, o WCF utiliza o protocolo SOAP, o que torna suas aplicações compatíveis com as diversas outras que usam este padrão. Quando uma aplicação desenvolvida com WCF se comunica com uma aplicação não WCF, é utilizado o protocolo SOAP tradicional, codificado com o uso de XML. Porém, quando duas aplicações desenvolvidas com WCF se comunicam, elas codificam as mensagens SOAP utilizando um formato binário otimizado (entre outras opções), com intenção de reduzir a quantidade de informação desnecessária a ser transmitida pela rede.
Um cliente se comunica com o serviço utilizando chamadas remotas a métodos (RPC). Estas chamadas podem ser bloqueantes (isto é, ao chamar um método do serviço, o cliente é bloqueado até que receba uma resposta à sua chamada) ou não bloqueantes. No primeiro caso é utilizado um objeto proxy que redireciona todas as chamadas para o serviço e prove abstração para o cliente, que tratará todas as chamadas a métodos do serviço como chamadas a este objeto proxy. No segundo caso, as solicitações e os valores de retorno devem ser trocados entre o cliente e o servidor através de mensagens, utilizando filas de mensagens para que seja possível que a comunicação seja assíncrona (Message Queue, em inglês).

### Componentes de um serviço WCF

Um serviço WCF é composto de 3 partes: a classe que implementa o serviço, um ambiente (em inglês chamado de host environment) que abriga e mantém o serviço e um ou mais endpoints (chamados Service Endpoint), componentes nos quais os clientes irão se conectar para realizar a comunicação.
Os endpoints definem quais métodos estarão acessíveis e como os clientes devem se comunicar com os serviços (através de componentes chamados bindings). Um binding especifica que protocolos serão usados para se conectar ao endpoint (WCF suporta alguns como SOAP/HTTP e SOAP/TCP), qual a codificação será utilizada, questões de segurança, entre outros. Eles também possuem um endereço (uma URL) e propriedades para especificar como os dados serão transmitidos. Resumidamente, um endpoint é formado pelos três componentes abaixo:
* Endereço (EndpointAddress): Especifica aonde o endpoint reside;
* Ligação (Binding): Especifica como o endpoint se comunica com outros componentes;
* Descrição (ContractDescription): Especifica o que o endpoint disponibiliza.
Um endpoint cliente só poderá se comunicar com um endpoint do serviço se ambos possuírem bindings compatíveis, ou seja, suportarem os mesmos protocolos de comunicação, mesma codificação e assim por diante.
As operações que um serviço pode realizar são definidas por componentes chamados Service Contracts, especificados utilizando atributos do Framework .NET. Estes atributos irão gerar automaticamente as descrições desses serviços e seus métodos (arquivos WSDL).
Também são utilizados atributos (agora os componentes Data Contracts) pra especificar os dados que são tratados pelos métodos (argumentos dos métodos e valores de retorno). Para tipos de dados simples (como int e char), o WCF define automaticamente estes atributos. Porém, para tipos complexos (objetos, estruturas, entre outros), fica a cargo do programador defini-los. Estes contratos definem como os dados serão serializados e deserializados, permitindo sua transmissão pela rede.

### WCF Runtime

WCF Runtime é o nome dado ao conjunto de objetos responsável por facilitar o envio e recebimento de mensagens. Eles são responsáveis por formatar as mensagens, tratar questões de segurança, implementar os protocolos utilizados na transmissão, entre outras tarefas.
o WCF Runtime também utiliza endpoints para as conexões (aqui chamados de Endpoint Listener), com algumas modificações nos nomes dados aos componentes internos, mas ainda assim utilizando três deles com os mesmos objetivos dos componentes dos endpoints dos serviços: indicar aonde, como e o que.

# Ligações externas

* .NET Remoting na Wikipedia: http://en.wikipedia.org/wiki/.Net_Remoting (em inglês)
* WCF na Wikipedia: http://en.wikipedia.org/wiki/Windows_Communication_Foundation (em inglês)
* Página principal da WCF na rede de desenvolvedores da Microsoft (MSDN): http://msdn2.microsoft.com/en-us/netframework/aa663324.aspx (em inglês)