Compartilhar via


Novidades no Windows Communication Foundation 4.5

Este tópico discute os novos recursos 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 tem como base o HTTP/2, o que oferece várias vantagens sobre o WCF, incluindo:

  • Desempenho: o gRPC é muito mais eficiente que o WCF, especialmente para conexões de longa duração.
  • Escalabilidade: o gRPC foi projetado para escalar 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.
  • Plataforma cruzada: o gRPC é independente de 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, confira:

funcionalidades de simplificação do WCF

Muito trabalho foi feito para facilitar o desenvolvimento e a manutenção de aplicativos do WCF 4.5. Para obter mais informações, consulte recursos de simplificação do WCF.

Suporte assíncrono baseado em tarefas

Por padrão, Adicionar Referência de Serviço gera métodos de operação de serviço assíncrono de retorno de tarefas. Isso é feito para métodos síncronos e assíncronos. Isso permite que você chame as operações de serviço assincronamente usando o novo modelo de programação assíncrona baseado em tarefa. Quando você chama o método proxy gerado, o WCF constrói um objeto de tarefa para representar a operação assíncrona e retornar essa tarefa para você. A tarefa é concluída junto com a operação. Ao implementar uma operação assíncrona, você poderá implementá-la como uma operação assíncrona baseada em tarefa. Para obter mais informações, consulte Operações síncronas e assíncronas.

Arquivos de configuração gerados simplificados

Quando você adiciona uma referência de serviço no Visual Studio ou usa a ferramenta SvcUtil.exe, um arquivo de configuração de cliente é gerado. Em versões anteriores do WCF, esses arquivos de configuração continham o valor de cada propriedade de associação mesmo se seu valor fosse o valor padrão. No WCF 4.5, os arquivos de configuração gerados contêm apenas as propriedades de associação que são definidas com um valor não padrão.

Para obter mais informações, consulte recursos de simplificação do WCF.

Desenvolvimento de primeiro contrato

O WCF agora tem suporte para desenvolvimento do primeiro contrato. A ferramenta svcutl.exe tem uma opção /serviceContract que permite gerar contratos de serviço e de dados de um documento WSDL.

Adicione uma referência de serviço de um projeto de subconjunto portátil

Os projetos de subconjunto portáteis permitem que os programadores do assembly .NET mantenham uma única árvore de origem e criem o sistema enquanto ainda dão suporte a várias plataformas .NET (área de trabalho, Silverlight, Windows Phone e XBOX). Os projetos de subconjunto portáteis somente fazem referência às bibliotecas portáteis .NET, que são assemblies que podem ser usados em qualquer plataforma .NET. A experiência do desenvolvedor é a mesma que adicionar uma referência de serviço dentro de qualquer outro aplicativo cliente WCF. Para obter mais informações, consulte Adicionar Referência de Serviço em um projeto de subconjunto portátil.

Padrão do modo de compatibilidade do ASP.NET alterado

O WCF fornece o modo de compatibilidade do ASP.NET para conceder aos desenvolvedores acesso completo aos recursos no pipeline HTTP do ASP.NET ao escrever serviços do WCF. Para usar esse modo, você precisa definir o atributo aspNetCompatibilityEnabled como verdadeiro na seção <serviceHostingEnvironment> do web.config. Além disso, qualquer serviço neste appDomain precisa ter a propriedade RequirementsMode em seu conjunto AspNetCompatibilityRequirementsAttribute como Allowed ou Required. Por padrão, AspNetCompatibilityRequirementsAttribute é definido como Allowed. Para obter mais informações, consulte Serviços WCF e ASP.NET.

Novos valores padrão de transporte

Para simplificar a configuração, alguns valores padrão da propriedade de transporte foram alterados. Para obter mais informações, consulte recursos de simplificação do WCF.

XmlDictionaryReaderQuotas

XmlDictionaryReaderQuotas contém valores de cota configuráveis para os leitores de dicionário de XML que limitam a quantidade de memória utilizada por um codificador ao criar uma mensagem. Embora essas quotas sejam configuráveis, os valores padrão foram alterados para diminuir a possibilidade de um desenvolvedor precisar defini-las explicitamente. Para obter mais informações, consulte recursos de simplificação do WCF.

Validação da instalação do WCF

Como parte do processo de compilação dentro do Visual Studio, os arquivos de configuração do WCF agora são validados para os atributos definidos dentro do projeto. Uma lista de erros de validação ou avisos são exibidos no Visual Studio se a validação falhar.

Dicas do editor XML

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

Melhorias de streaming

Suporte adicionado para streaming assíncrono verdadeiro onde o lado de envio agora não bloqueia threads se o lado de recebimento não está lendo ou lê lentamente, aumentando, portanto, a escalabilidade. Remove a limitação de armazenamento em buffer de mensagem quando um cliente envia uma mensagem transmitida por streaming para um serviço WCF hospedado no IIS. Para obter mais informações, consulte recursos de simplificação do WCF.

Simplificar a exposição de um ponto de extremidade em HTTPS com o IIS

Um mapeamento de protocolo de HTTPS foi adicionado para simplificar a exposição de um ponto de extremidade em HTTPS. Para habilitar um ponto de extremidade HTTPS, verifique se seu site com uma associação de HTTPS e o certificado de SSL configurado e, em seguida, basta habilitar o HTTPS para o diretório virtual que hospeda o serviço. Se os metadados estiverem habilitados para o serviço, isso será exposto por HTTPS também.

Gerando um único documento WSDL

Pilhas de processamento de WSDL de terceiros não podem processar os documentos WSDL que têm dependências de outros documentos por meio de um xsd:import. O WCF agora permite que você especifique que todas as informações de WSDL sejam retornadas em um único documento. Para solicitar que um único documento WSDL acrescente “?singleWSDL” ao URI ao solicitar metadados do serviço.

Suporte de WebSocket

WebSockets é uma tecnologia que fornece comunicação bidirecional verdadeira nas portas 80 e 443 com as características de desempenho semelhantes ao TCP. Duas novas associações foram adicionadas à comunicação de suporte em um transporte de WebSocket. NetHttpBinding e NetHttpsBinding. Para obter mais informações, consulte: Associações fornecidas pelo sistema.

Novos valores padrão de transporte

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

Propriedade Ativado Novo padrão Para obter mais informações, consulte
channelInitializationTimeout NetTcpBinding 30 segundos ChannelInitializationTimeout
listenBacklog NetTcpBinding 12 * número de processadores ListenBacklog
maxPendingAccepts ConnectionOrientedTransportBindingElement

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

4 * número de processadores para SMSvcHost.exe
MaxPendingAcceptsConfigurando o serviço de compartilhamento de porta Net.TCP
maxPendingConnections ConnectionOrientedTransportBindingElement 12 * número de processadores MaxPendingConnections
receiveTimeout SMSvcHost.exe 30 segundos Configurando o serviço de compartilhamento de porta Net.TCP

Configurando serviços WCF em código

O WCF (Windows Communication Foundation) 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 depois de ser implantado. Ao usar arquivos de configuração, um profissional de TI apenas precisa atualizar o arquivo de configuração, nenhuma recompilação é necessária. Os arquivos de configuração, porém, podem ser complexos e difíceis de manter. Não há suporte para depurar arquivos de configuração e os elementos de configuração são referenciados por nomes, o que torna os arquivos de configuração de criação sujeitos a erros e difíceis. O WCF também permite configurar serviços no código. Em versões anteriores do WCF (4.0 e anteriores), configurar serviços no código era fácil em cenários auto-hospedados, a classe ServiceHost permitia que você configurasse pontos de extremidade e comportamentos antes de chamar o ServiceHost.Open. Em cenários hospedados na Web, porém, você não tem acesso à classe ServiceHost. Para configurar um serviço Web hospedado, você precisava criar um System.ServiceModel.ServiceHostFactory que criou o ServiceHostFactory e executar qualquer configuração necessária. A partir do .NET Framework 4.5, o WCF fornece um modo mais fácil de configurar serviços auto-hospedados e hospedados na Web no código. Para obter mais informações, consulte Configurar os Serviços do WCF no código.

Cache de ChannelFactory

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

  1. Construir a árvore de ContractDescription

  2. Refletir todos os tipos CLR necessários

  3. Construir a pilha de canal

  4. Descarte de recursos

Para ajudar a minimizar a sobrecarga, o WCF pode armazenar em cache fábricas de canal quando você está usando um proxy de cliente WCF. Para obter mais informações, consulte Fábrica de canais de cache.

Compactação e o codificador binário

A partir do WCF 4.5, o codificador binário do WCF adiciona suporte para compactação. O tipo de compactação é configurado com a propriedade CompressionFormat. O cliente e o serviço devem configurar a propriedade CompressionFormat. A compactação funcionará para os protocolos de HTTP, HTTPS e TCP. Se um cliente especificar o uso de compactação, mas o serviço não oferece suporte a isso, uma exceção de protocolo será gerada indicando uma incompatibilidade de protocolo. Para obter mais informações, consulte Escolhendo um codificador de mensagens.

UDP

O suporte foi adicionado para um transporte de UDP, que permite que os desenvolvedores escrevam os serviços que usam mensagens de “atirar e esquecer”. Um cliente envia uma mensagem para um serviço e não espera nenhuma resposta do serviço.

Suporte a várias autenticações

O suporte foi adicionado para dar suporte a vários modos de autenticação, conforme o suporte pelo IIS, em um único ponto de extremidade do WCF ao usar o transporte de HTTP e a segurança de transporte. O IIS permite que você habilite vários modos de autenticação em um diretório virtual. Esse recurso permite que um único ponto de extremidade WCF dê suporte a vários modos de autenticação habilitados para o diretório virtual em que o serviço WCF está hospedado.

Suporte a IDN

O suporte foi adicionado para permitir os serviços WCF com nomes de domínio internacionalizados. Para obter mais informações, consulte Nomes de domínio WCF e internacionalizados.

HttpClient

Uma nova classe chamada HttpClient foi adicionada para facilitar muito o trabalho com solicitações de HTTP. Para obter mais informações, confira HttpClient e as Diretrizes para usar clientes HTTP.

IntelliSense de configuração

Os valores de atributo nos arquivos de configuração para os atributos personalizados definidos no projeto agora dão suporte ao IntelliSense para facilitar o trabalho com configurações de maneira rápida e precisa.

Dicas de ferramenta de configuração

Os elementos e os atributos do WCF têm agora dicas de ferramentas no editor de XML, para identificar de maneira mais fácil e precisa a finalidade do elemento ou atributo.

Colar dados como classes

Em um projeto WCF, os tipos de dados definidos no XML (como são expostos em um serviço) podem ser colados diretamente em uma página de código. O tipo de XML será colado como um tipo CLR. Consulte Gerando classes de tipo de dados de XML para obter mais detalhes.

WebServiceHost e pontos de extremidade padrão

No Visual Studio 2010, o WebServiceHost automaticamente criava um ponto de extremidade padrão se você tivesse especificado explicitamente um ponto de extremidade ou não. No Visual Studio 2012 e posteriores, o WebServiceHost apenas criará um ponto de extremidade padrão se nenhum ponto de extremidade for adicionado explicitamente. Se o cliente estiver aguardando o ponto de extremidade padrão, você poderá explicitamente adicionar um ponto de extremidade e apontar o cliente para ele. Como alternativa, você pode informar WCF para reverter para o comportamento anterior adicionando a seguinte configuração ao arquivo de configuração do aplicativo

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

IHttpCookieContainerManager

Essa interface, exposta pelo IChannelFactory<TChannel>, facilita muito o trabalho com cookies no lado do cliente. Quando AllowCookies está definido como verdadeiro na associação, você poderá acessar os cookies usando o seguinte código:

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

Você pode recuperar ou definir cookies a partir do CookieContainer. Quando AllowCookies for definido como falso, você poderá recuperar os cookies manualmente usando OperationContext e enviá-los em outras solicitações usando outro OperationContext ou inspetor da mensagem. A interface de IHttpCookieContainerManager permite autenticar um usuário com um serviço e usar o cookie de autenticação retornado por esse serviço para autenticar com outros serviços.