Ler em inglês

Partilhar via


O que há de novo no Windows Communication Foundation 4.5

Este tópico discute os recursos novos 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

Muito trabalho foi feito para tornar os aplicativos WCF 4.5 mais fáceis de desenvolver e manter. Para obter mais informações, consulte Recursos de simplificação do WCF.

Suporte assíncrono baseado em tarefas

Por padrão, Add Service Reference gera métodos de operação de serviço assíncrono que retornam tarefas. Isso é feito para métodos síncronos e assíncronos. Isso permite que você chame as operações de serviço de forma assíncrona usando o novo modelo de programação assíncrona baseado em tarefas. Quando você chama o método proxy gerado, o WCF constrói um objeto Task para representar a operação assíncrona e retorna essa Task para você. A tarefa é concluída quando a operação é concluída. Ao implementar uma operação assíncrona, você pode implementá-la como uma operação assíncrona baseada em tarefas. 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 do cliente é gerado. 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 obter mais informações, consulte Recursos de simplificação do WCF.

Desenvolvimento Contract-First

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

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

Os projetos de subconjuntos portáteis permitem que os programadores de montagem .NET mantenham uma única árvore de código-fonte e construam o sistema enquanto ainda suportam várias plataformas .NET (desktop, Silverlight, Windows Phone e Xbox). Os projetos de subconjuntos portáteis fazem referência apenas a 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 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.

ASP.NET padrão do modo de compatibilidade alterado

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

Novos valores padrão de transporte

Para simplificar a configuração, vários valores padrão de 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 leitores de dicionário XML que limitam a quantidade de memória utilizada por um codificador durante a criação de uma mensagem. Embora essas cotas sejam configuráveis, os valores padrão foram alterados para diminuir a possibilidade de um desenvolvedor ter que defini-las explicitamente. Para obter mais informações, consulte Recursos de simplificação do WCF.

Validação de configuração do WCF

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

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

Adicionado suporte para streaming assíncrono verdadeiro, onde o lado de envio agora não bloqueia threads se o lado de recebimento não estiver lendo ou lento na leitura, aumentando assim a escalabilidade. Removida a limitação do buffer de mensagens quando um cliente envia uma mensagem transmitida para um serviço WCF hospedado no IIS. Para obter mais informações, consulte Recursos de simplificação do WCF.

Simplificando a exposição de um ponto de extremidade sobre HTTPS com o IIS

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

Gerando um único documento WSDL

Algumas pilhas de processamento WSDL de terceiros não são capazes de processar documentos WSDL que têm dependências em outros documentos por meio de um xsd:import. O WCF agora permite que você especifique que todas as informações WSDL sejam retornadas em um único documento. Para solicitar um único documento WSDL, anexe "?singleWSDL" ao URI ao solicitar metadados do serviço.

Suporte WebSocket

WebSockets é uma tecnologia que fornece uma verdadeira comunicação bidirecional através das portas 80 e 443 com características de desempenho semelhantes ao TCP. Duas novas ligações foram adicionadas para dar suporte à comunicação em um transporte WebSocket. NetHttpBinding e NetHttpsBinding. Para obter mais informações, consulte: Ligaçõ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.

Property Ativado Novo padrão Para mais informações, consultar:
channelInitializationTimeout NetTcpBinding 30 segundos ChannelInitializationTimeout
listenBacklog NetTcpBinding 12 * número de processadores ListenBacklog
maxPendingAceita ConnectionOrientedTransportBindingElement

SMSvcHost.exe
2 * número de processadores para 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 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) configurar serviços em código era fácil em cenários auto-hospedados, a ServiceHost classe permitia configurar pontos de extremidade e comportamentos antes de chamar ServiceHost.Open. Em cenários hospedados na Web, no entanto, você não tem acesso à ServiceHost classe. Para configurar um serviço hospedado na Web, era necessário criar um System.ServiceModel.ServiceHostFactory que criasse e executasse qualquer ServiceHostFactory 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 obter mais informações, consulte Configurando serviços WCF no código.

Cache do 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. Construção da ContractDescription árvore

  2. Refletindo 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 obter mais informações, consulte Channel Factory and 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. O cliente e o serviço devem configurar a CompressionFormat propriedade. A compactação funcionará para protocolos HTTP, HTTPS e TCP. Se um cliente especificar usar compactação, mas o serviço não oferecer suporte a ela, uma exceção de protocolo será lançada, indicando uma incompatibilidade de protocolo. Para obter mais informações, consulte Escolhendo um codificador de mensagens.

UDP

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

Suporte a autenticação múltipla

O suporte foi adicionado para suportar vários modos de autenticação, conforme suportado pelo IIS, em um único ponto de extremidade WCF ao usar a segurança de transporte e transporte HTTP. 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 ofereça suporte a vários modos de autenticação habilitados para o diretório virtual onde o serviço WCF está hospedado.

Suporte IDN

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

HttpClient

Uma nova classe chamada HttpClient foi adicionada para tornar o trabalho com solicitações HTTP muito mais fácil. Para obter mais informações, consulte HttpClient e Diretrizes para usar HttpClient.

Configuração IntelliSense

Os valores de atributos em arquivos de configuração para atributos personalizados definidos no projeto agora suportam o IntelliSense para facilitar o trabalho com configurações de forma rápida e precisa.

Dicas de ferramentas de configuração

Os elementos e atributos do WCF agora têm dicas de ferramentas no editor XML, para identificar com mais facilidade e precisão a finalidade do elemento ou atributo.

Colar dados como classes

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

WebServiceHost e pontos de extremidade padrão

No Visual Studio 2010, WebServiceHost criou automaticamente um ponto de extremidade padrão, quer você tenha especificado explicitamente um ponto de extremidade ou não. No Visual Studio 2012 e posterior, WebServiceHost só cria um ponto de extremidade padrão se nenhum ponto de extremidade for explicitamente adicionado. Se o cliente estiver esperando o ponto de extremidade padrão, você poderá adicionar explicitamente um ponto de extremidade e apontar o cliente para ele. Como alternativa, você pode dizer ao WCF para reverter para o comportamento anterior adicionando a seguinte configuração ao arquivo de configuração do seu aplicativo

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

IHttpCookieContainerManager

Esta interface, exposta pela IChannelFactory<TChannel>, torna o trabalho com cookies do lado do cliente muito mais fácil. Quando AllowCookies é definido como true na ligação, você pode acessar cookies usando o seguinte código:

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

Em seguida, você pode recuperar ou definir os cookies do CookieContainer. Quando AllowCookies está definido como false, você pode recuperar manualmente os cookies usando OperationContext e enviá-los em outras solicitações usando outro OperationContext ou inspetor de mensagens. A interface IHttpCookieContainerManager permite que você autentique um usuário com um serviço e use o cookie de autenticação retornado por esse serviço para autenticar com outros serviços.