Introdução à Extensibilidade
O modelo de aplicativo do Windows Communication Foundation (WCF) foi projetado para resolver a maior parte dos requisitos de comunicação de qualquer aplicativo distribuído. Mas sempre há cenários que o modelo de aplicativo padrão e as implementações fornecidas pelo sistema não suportam. O modelo de extensibilidade do WCF destina-se a oferecer suporte a cenários personalizados, permitindo que você modifique o comportamento do sistema em todos os níveis, até o ponto de substituir todo o modelo de aplicativo. Este tópico descreve as várias áreas de extensão e aponta para mais informações sobre cada uma delas.
Áreas a Alargar
Pode alargar:
O tempo de execução do aplicativo. Isso estende o envio e o processamento de mensagens para o aplicativo. Essa área também inclui a extensão do sistema de segurança, o sistema de metadados, o sistema de serialização e as ligações e elementos de ligação que conectam o aplicativo com o sistema de canal subjacente.
O canal e o tempo de execução do canal. Isso estende o sistema que funciona no nível da mensagem, fornecendo suporte a protocolo, transporte e codificação.
O tempo de execução do host. Isso estende a relação do domínio do aplicativo de hospedagem com o canal e o tempo de execução do aplicativo.
Estendendo o tempo de execução do aplicativo
Em aplicativos WCF, há uma distinção entre mensagens que são destinadas a um canal correspondente e mensagens que são destinadas ao próprio aplicativo. As mensagens do canal suportam algumas funcionalidades relacionadas ao canal, como estabelecer uma conversa segura ou estabelecer uma sessão confiável. Essas mensagens não estão disponíveis para o tempo de execução do aplicativo; eles são processados antes que a camada de aplicativo seja envolvida.
As mensagens do aplicativo contêm dados destinados a uma operação de cliente ou serviço que você ou seu cliente criou. Essas mensagens estão disponíveis para o sistema de extensão no nível do aplicativo em forma de mensagem ou objeto, dependendo das suas necessidades.
Todas as mensagens passam pelo sistema de canais; Somente as mensagens do aplicativo são passadas do sistema de canal para o aplicativo. Para criar uma nova funcionalidade no nível do canal, você deve estender o sistema de canais. Para criar uma nova funcionalidade no nível do aplicativo, você deve estender o tempo de execução do serviço ou do cliente (dispatchers e channel factories, respectivamente). Para obter mais informações sobre como estender o tempo de execução do aplicativo, consulte Estendendo ServiceHost e a camada de modelo de serviço.
Estendendo a segurança
Para criar mecanismos de segurança personalizados, como tokens e credenciais, você deve estender o sistema de segurança. Para obter mais informações, consulte Estendendo a segurança.
Estendendo metadados
Para expor seus metadados de forma diferente do padrão, você deve estender o sistema de metadados. Para obter mais informações, consulte Estendendo o sistema de metadados.
Estendendo a serialização
Para criar codificadores personalizados, fornecer substitutos de dados ou outro trabalho que envolva a personalização de dados transferidos, você deve estender o sistema de serialização. Para obter mais informações, consulte Estendendo codificadores e serializadores.
Estendendo ligações
Para associar canais de transporte ou protocolo à camada de aplicativo, você deve estender o sistema de vinculação. Para obter mais informações, consulte Estendendo ligações.
Extensão do sistema de canais
Para criar canais que ofereçam suporte a transportes personalizados ou funcionalidade de protocolo, consulte Estendendo a camada de canal.
Estendendo o sistema de hospedagem de serviços
Para modificar o modelo de aplicativo de todo o serviço, você deve estender System.ServiceModel.ServiceHostBase a classe. Para obter mais informações, consulte Estendendo ServiceHost e a camada de modelo de serviço.
Para modificar a relação entre o domínio do aplicativo de hospedagem e o host de serviço, você deve estender a System.ServiceModel.Activation.ServiceHostFactory classe. Para obter mais informações, consulte Estendendo a hospedagem usando ServiceHostFactory.