Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Este tópico aborda vários problemas específicos para aplicativos cliente de camada intermediária que usam o WCF (Windows Communication Foundation).
Aumentando o desempenho do cliente Middle-Tier
Em comparação com tecnologias de comunicação anteriores, como serviços Web usando ASP.NET, a criação de uma instância de cliente do WCF pode ser mais complexa devido ao conjunto de recursos avançado do WCF. Por exemplo, quando um ChannelFactory<TChannel> objeto é aberto, ele pode estabelecer uma sessão segura com o serviço, um procedimento que aumenta o tempo de inicialização da instância do cliente. Normalmente, esses recursos adicionais não afetam muito os aplicativos cliente, pois o cliente WCF faz várias chamadas e fecha.
Os aplicativos cliente de camada intermediária, no entanto, podem criar muitos objetos de cliente WCF rapidamente e, como resultado, experimentar requisitos de inicialização aumentados. Há duas abordagens principais para aumentar o desempenho de aplicativos de camada intermediária ao chamar serviços:
Armazene em cache o objeto cliente WCF e reutilize-o para chamadas subsequentes sempre que possível.
Crie um ChannelFactory<TChannel> objeto e use esse objeto para criar novos objetos de canal de cliente do WCF para cada chamada.
Os problemas a serem considerados ao usar essas abordagens incluem:
Se o serviço estiver mantendo um estado específico do cliente usando uma sessão, você não poderá reutilizar o cliente WCF de camada intermediária com solicitações de camada de vários clientes porque o estado do serviço está vinculado ao do cliente de camada intermediária.
Se o serviço precisar executar a autenticação por cliente, você deverá criar um novo cliente para cada solicitação de entrada na camada intermediária em vez de reutilização do cliente WCF de camada intermediária (ou objeto de canal do cliente WCF), pois as credenciais do cliente da camada intermediária não podem ser modificadas após a criação do cliente WCF (ou ChannelFactory<TChannel>) .
Embora os canais e clientes criados pelos canais sejam thread-safe, eles podem não permitir gravação de mais de uma mensagem na transmissão simultaneamente. Se você estiver enviando mensagens grandes, especialmente se houver streaming, a operação de envio poderá bloquear a espera da conclusão de outro envio. Isso causa dois tipos de problemas: a falta de simultaneidade e a possibilidade de deadlock se o fluxo de controle retornar ao serviço reutilizando o canal (ou seja, o cliente compartilhado chama um serviço cujo caminho de código resulta em um retorno de chamada para o cliente compartilhado). Isso é verdadeiro independentemente do tipo de cliente WCF que você reutilizar.
Você deve lidar com canais defeituosos, independentemente de você compartilhar ou não o canal. No entanto, quando os canais são reutilizados, um canal com falha pode derrubar mais de uma solicitação ou envio pendente.
Para obter um exemplo que demonstra as práticas recomendadas para reutilizando um cliente para várias solicitações, consulte Associação de Dados em um cliente ASP.NET.
Além disso, você pode aumentar o desempenho de inicialização para os clientes que usam tipos de dados serializáveis usando o XmlSerializer código de geração e compilação de serialização para esses tipos de dados em runtime, o que pode resultar em um desempenho lento de inicialização. A Ferramenta de Utilitário de Metadados do ServiceModel (Svcutil.exe) pode melhorar o desempenho de inicialização desses aplicativos gerando o código de serialização necessário dos assemblies compilados para o aplicativo. Para obter mais informações, consulte Como melhorar o tempo de inicialização de aplicativos cliente WCF usando o XmlSerializer.