Partilhar via


Novidades no Windows Communication Foundation 4.5

Este tópico discute as funcionalidades novas do Windows Communication Foundation (WCF) versão 4.5.

gRPC como alternativa ao WCF

gRPC é uma estrutura RPC moderna que é uma alternativa popular ao WCF. O gRPC é construído com base no HTTP/2, que oferece uma série de vantagens em relação ao WCF, incluindo:

  • Desempenho: o gRPC é muito mais eficiente do que o WCF, especialmente para conexões de longa duração.
  • Escalabilidade: o gRPC foi projetado para ser dimensionado para um grande número de clientes e servidores.
  • Segurança: o gRPC suporta uma variedade de mecanismos de segurança, incluindo TLS e autenticação.
  • Multiplataforma: o gRPC é neutro em relação à plataforma e pode ser usado com uma variedade de linguagens de programação.

Para obter mais informações sobre como desenvolver ou migrar aplicativos WCF para gRPC, consulte:

Recursos de simplificação do WCF

Foi feito muito trabalho para tornar as aplicações WCF 4.5 mais fáceis de desenvolver e manter. Para mais informações, consulte Funcionalidades de Simplificação do WCF.

Suporte Assíncrono Baseado em Tarefas

Por defeito, Adicionar Referência de Serviço gera métodos de operação de serviço assíncrono que retornam tarefas. Isto é feito tanto para métodos síncronos como assíncronos. Isto permite chamar as operações do serviço de forma assíncrona usando o novo modelo de programação assíncrona baseada em tarefas. Quando chama o método proxy gerado, o WCF constrói um objeto Tarefa para representar a operação assíncrona e devolve-lhe essa Tarefa. A Tarefa termina quando a operação termina. Ao implementar uma operação assíncrona, pode implementá-la como uma operação assíncrona baseada em tarefas. Para mais informações, veja Operações Síncronas e Assíncronas.

Arquivos de configuração gerados simplificados

Quando adicionas uma referência de serviço no Visual Studio ou usas a ferramenta SvcUtil.exe, é gerado um ficheiro de configuração do cliente. Em versões anteriores do WCF, esses arquivos de configuração continham o valor de cada propriedade de ligação, mesmo que seu valor seja o valor padrão. No WCF 4.5, os arquivos de configuração gerados contêm apenas as propriedades de vinculação que são definidas como um valor não padrão.

Para mais informações, consulte Funcionalidades de Simplificação do WCF.

Contract-First Desenvolvimento

O WCF agora tem suporte para desenvolvimento orientado a contrato. O svcutil.exe tem um switch /serviceContract que permite gerar contratos de serviço e dados a partir de um documento WSDL.

Adicionar Referência de Serviço a partir de um Projeto de Subconjunto Portátil

Projetos de subconjuntos portáteis permitem aos programadores assembly .NET manter uma única árvore de código fonte e um sistema de compilação, ao mesmo tempo que suportam múltiplas plataformas .NET (desktop, Silverlight, Windows Phone e Xbox). Projetos de subconjuntos portáteis apenas referenciam bibliotecas portáteis .NET que são assemblies que podem ser usadas em qualquer plataforma .NET. A experiência do desenvolvedor é a mesma que adicionar uma referência de serviço em qualquer outro aplicativo cliente WCF. Para obter mais informações, consulte Adicionar referência de serviço em um projeto de subconjunto portátil.

Alteração do padrão do modo de compatibilidade do ASP.NET

O WCF fornece o modo de compatibilidade ASP.NET para conceder aos desenvolvedores acesso total aos recursos do pipeline HTTP do ASP.NET ao desenvolver serviços WCF. Para usar este modo, deve-se definir o atributo aspNetCompatibilityEnabled como true na secção <serviceHostingEnvironment> do web.config. Além disso, qualquer serviço neste appDomain precisa ter a propriedade RequirementsMode no seu AspNetCompatibilityRequirementsAttribute definida como Allowed ou Required. Por padrão AspNetCompatibilityRequirementsAttribute está agora definido como Allowed. Para mais informações, consulte WCF Services e ASP.NET.

Novos valores padrão de transporte

Para simplificar a configuração, vários valores padrão das propriedades de transporte foram alterados. Para mais informações, consulte Funcionalidades de Simplificação do WCF.

XmlDictionaryReaderQuotas

XmlDictionaryReaderQuotas contém valores de cota configuráveis para leitores de dicionário XML que limitam a quantidade de memória utilizada por um codificador durante a criação de uma mensagem. Embora estas quotas sejam configuráveis, os valores padrão mudaram para diminuir a possibilidade de um programador ter de as definir explicitamente. Para mais informações, consulte Funcionalidades de Simplificação do WCF.

Validação de configuração do WCF

Como parte do processo de compilação no Visual Studio, os ficheiros de configuração WCF são agora validados para atributos definidos dentro do projeto. Uma lista de erros ou avisos de validação é exibida no Visual Studio caso a validação falhe.

Dicas de ferramentas do Editor XML

Para ajudar os desenvolvedores de serviço WCF novos e existentes a configurar seus serviços, o editor XML do Visual Studio agora fornece dicas de ferramentas para cada elemento de configuração e suas propriedades que fazem parte do arquivo de configuração de serviço.

Melhorias no streaming

Foi adicionado suporte para streaming assíncrono verdadeiro, em que o lado emissor agora não bloqueia as threads se o lado de receção não estiver a ler ou estiver a ler lentamente, aumentando assim a escalabilidade. Eliminada a limitação do buffering de mensagens quando um cliente envia uma mensagem transmitida para um serviço WCF alojado no IIS. Para mais informações, consulte Funcionalidades de Simplificação do WCF.

Simplificar a exposição de um endpoint sobre HTTPS com IIS

Foi adicionado um mapeamento do protocolo HTTPS para simplificar a exposição de um endpoint sobre HTTPS. Para ativar um endpoint HTTPS, certifique-se de que o seu site tem uma ligação HTTPS e um certificado SSL configurados, e depois simplesmente ative o HTTPS para o diretório virtual que aloja o serviço. Se os metadados estiverem ativados para o serviço, também serão expostos via HTTPS.

Geração de um Único Documento WSDL

Algumas pilhas de processamento WSDL de terceiros não conseguem processar documentos WSDL que dependem de outros documentos por meio de um xsd:import. O WCF permite agora especificar que toda a informação do WSDL seja devolvida num único documento. Para solicitar um único documento WSDL, adicione "?singleWSDL" ao URI ao solicitar metadados ao serviço.

Suporte ao WebSocket

O WebSockets é uma tecnologia que proporciona verdadeira comunicação bidirecional sobre as portas 80 e 443, com características de desempenho semelhantes às do TCP. Foram adicionadas duas novas ligações para suportar comunicação através de um transporte WebSocket. NetHttpBinding e NetHttpsBinding. Para mais informações, veja: Associações Fornecidas pelo Sistema.

Novos valores padrão de transporte

A tabela a seguir descreve as configurações que foram alteradas e onde encontrar informações adicionais.

Propriedade Ligado Novo padrão Para mais informações, consulte
tempo limite para a inicialização do canal NetTcpBinding 30 segundos ChannelInitializationTimeout
ouvirAtraso NetTcpBinding 12 * número de processadores ListenBacklog
maxPendingAceites ElementoDeLigaçãoDeTransporteOrientadoPorConexão

SMSvcHost.exe
2 * número de processadores para transporte

4 * número de processadores para SMSvcHost.exe
MaxPendingAccepts Configuração do Serviço de Partilha de Portas Net.TCP
máximo de ligações pendentes ElementoDeLigaçãoDeTransporteOrientadoPorConexão 12 * número de processadores MaxPendingConnections
receiveTimeout (tempo limite de recepção) SMSvcHost.exe 30 segundos Configurando o serviço de compartilhamento de porta Net.TCP

Configurando serviços WCF no código

O Windows Communication Foundation (WCF) permite que os desenvolvedores configurem serviços usando arquivos de configuração ou código. Os arquivos de configuração são úteis quando um serviço precisa ser configurado após ser implantado. Ao usar arquivos de configuração, um profissional de TI só precisa atualizar o arquivo de configuração, nenhuma recompilação é necessária. Os arquivos de configuração, no entanto, podem ser complexos e difíceis de manter. Não há suporte para depuração de arquivos de configuração e os elementos de configuração são referenciados por nomes, o que torna a criação de arquivos de configuração propensa a erros e difícil. WCF também permite que você configure serviços em código. Em versões anteriores do WCF (4.0 e anteriores), em cenários auto-hospedados, era fácil configurar serviços em código; a classe ServiceHost permitia configurar pontos de extremidade e comportamentos antes de chamar ServiceHost.Open. Em cenários hospedados na web, no entanto, não tem acesso à classe ServiceHost. Para configurar um serviço hospedado na Web, era necessário criar um System.ServiceModel.ServiceHostFactory que criasse o ServiceHostFactory e realizasse toda a configuração necessária. A partir do .NET Framework 4.5, o WCF fornece uma maneira mais fácil de configurar serviços auto-hospedados e hospedados na Web em código. Para mais informações, consulte Configurar Serviços WCF no Código.

Cacheamento de ChannelFactory

Os aplicativos cliente WCF usam a ChannelFactory<TChannel> classe para criar um canal de comunicação com um serviço WCF. A criação ChannelFactory<TChannel> de instâncias incorre em alguma sobrecarga porque envolve as seguintes operações:

  1. Construir a árvore ContractDescription

  2. Abrangendo todos os tipos de CLR necessários

  3. Construindo a pilha de canais

  4. Eliminação de recursos

Para ajudar a minimizar essa sobrecarga, o WCF pode armazenar fábricas de canal em cache quando você estiver usando um proxy de cliente WCF. Para mais informações, consulte Channel Factory e Caching.

Compressão e o codificador binário

A partir do WCF 4.5, o codificador binário WCF adiciona suporte para compactação. O tipo de compactação é configurado com a CompressionFormat propriedade. Tanto o cliente como o serviço devem configurar a CompressionFormat propriedade. A compressão funciona para protocolos HTTP, HTTPS e TCP. Se um cliente especificar usar compressão mas o serviço não a suportar, é lançada uma exceção de protocolo indicando uma incompatibilidade de protocolo. Para mais informações, veja Escolher um Codificador de Mensagens.

UDP

Foi adicionado suporte para um transporte UDP que permite aos desenvolvedores escrever serviços que utilizam mensagens de "fogo e esquece". Um cliente envia uma mensagem para um serviço e não espera nenhuma resposta do serviço.

Suporte para Autenticação Múltipla

Foi adicionado suporte para suportar múltiplos modos de autenticação, conforme suportado pelo IIS, num único endpoint WCF ao utilizar o transporte HTTP e a segurança do transporte. O IIS permite ativar múltiplos modos de autenticação num diretório virtual; esta funcionalidade permite que um único endpoint WCF suporte os múltiplos modos de autenticação ativados para o diretório virtual onde o serviço WCF está alojado.

Suporte IDN

Foi adicionado suporte para permitir serviços WCF com Nomes de Domínio Internacionalizados. Para mais informações, consulte WCF e Nomes de Domínio Internacionalizados.

HttpClient

Foi adicionada uma nova classe HttpClient chamada para facilitar muito o trabalho com pedidos HTTP. Para mais informações, consulte HttpClientDiretrizes para usar o HttpClient.

Configuração IntelliSense

Os valores dos atributos nos ficheiros de configuração para atributos personalizados definidos no projeto suportam agora o IntelliSense para facilitar o trabalho rápido e preciso com as configurações.

Dicas de configuração

Os elementos e atributos WCF têm agora balões de dica no editor XML, permitindo identificar mais facilmente e com maior precisão o propósito do elemento ou atributo.

Colar dados como classes

Num projeto WCF, os tipos de dados definidos em XML (como os expostos num serviço) podem ser colados diretamente numa página de código. O tipo XML será colado como um tipo CLR. Consulte Geração de Classes de Tipos de Dados a partir de XML para mais detalhes.

WebServiceHost e terminais predefinidos

No Visual Studio 2010, o WebServiceHost criava automaticamente um endpoint predefinido, quer especificasse explicitamente um endpoint ou não. No Visual Studio 2012 e posteriores, o WebServiceHost só cria um endpoint predefinido se nenhum endpoint for explicitamente adicionado. Se o seu cliente estiver à espera do endpoint padrão, pode adicionar explicitamente um endpoint e apontar o cliente para ele. Em alternativa, pode pedir ao WCF para reverter ao comportamento anterior adicionando a seguinte definição ao ficheiro de configuração da sua aplicação

<appSettings>
    <add key="wcf:webservicehost:enableautomaticendpointscompatability" value="true"/>
  </appSettings>

IHttpCookieContainerManager

Esta interface, exposta por IChannelFactory<TChannel>, facilita muito o trabalho com cookies do lado do cliente. Quando o AllowCookies está definido como verdadeiro na ligação, pode aceder a cookies usando o seguinte código:

IHttpCookieContainerManager cookieManager = factory.GetProperty<IHttpCookieContainerManager>();
System.Net.CookieContainer container = cookieManager.CookieContainer;

Pode então recuperar ou definir os cookies do CookieContainerarquivo. Quando o AllowCookies está definido como falso, pode recuperar manualmente os cookies usando OperationContext e enviá-los noutros pedidos através de outro OperationContext ou do inspetor de mensagens. A interface IHttpCookieContainerManager permite-lhe autenticar um utilizador com um serviço e usar o cookie de autenticação devolvido por esse serviço para se autenticar com outros serviços.