Introdução à extensibilidade
O modelo de aplicativo do WCF (Windows Communication Foundation) foi projetado para resolver a maior parte dos requisitos de comunicação de qualquer aplicativo distribuído. Mas sempre há cenários aos quais o modelo de aplicativo padrão e as implementações fornecidas pelo sistema não dão suporte. O modelo de extensibilidade do WCF destina-se a dar suporte a cenários personalizados, permitindo que você modifique o comportamento do sistema em todos os níveis, até mesmo ao 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 serem estendidas
Você pode estender:
O runtime do aplicativo. Isso estende a expedição e o processamento de mensagens do 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 associações e os elementos de associação que conectam o aplicativo ao sistema de canal subjacente.
O canal e o runtime do canal. Isso estende o sistema que funciona no nível da mensagem, fornecendo suporte a protocolo, transporte e codificação.
O runtime do host. Isso estende a relação do domínio do aplicativo de hospedagem para o canal e o runtime do aplicativo.
Como estender o runtime do aplicativo
Em aplicativos WCF, há uma distinção entre as mensagens destinadas a um canal correspondente e as mensagens destinadas ao próprio aplicativo. As mensagens de canal dão suporte a algumas funcionalidades relacionadas ao canal, como estabelecer uma conversa segura ou uma sessão confiável. Essas mensagens não estão disponíveis para o runtime do aplicativo. Elas são processadas antes que a camada de aplicativo seja envolvida.
As mensagens de aplicativo contêm dados destinados a uma operação de cliente ou de 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 no formato de mensagem ou de objeto, dependendo das suas necessidades.
Todas as mensagens passam pelo sistema de canal. Somente as mensagens de aplicativo são transmitidas do sistema de canal para o aplicativo. Para criar uma funcionalidade no nível do canal, você precisa estender o sistema de canais. Para criar uma funcionalidade no nível do aplicativo, você precisa estender o serviço ou o runtime do cliente (dispatchers e fábricas de canais, respectivamente). Para obter mais informações sobre como estender o runtime do aplicativo, confira Como estender o ServiceHost e a camada de modelo de serviço.
Segurança estendida
Para criar mecanismos de segurança personalizados, como tokens e credenciais, você precisa estender o sistema de segurança. Para obter mais informações, confira Como estender a segurança.
Como estender metadados
Para expor os metadados de maneira diferente do padrão, você precisa estender o sistema de metadados. Para obter mais informações, confira Como estender o sistema de metadados.
Como estender a serialização
Para criar codificadores personalizados, fornecer alternativas de dados ou para outros tipos de trabalho que envolvam a personalização de dados transferidos, é preciso estender o sistema de serialização. Para obter mais informações, confira Como estender codificadores e serializadores.
Estendendo associações
Para associar os canais de transporte ou de protocolo à camada de aplicativo, é preciso estender o sistema de associação. Para obter mais informações, confira Como estender associações.
Como estender o sistema de canais
Para criar canais que dão suporte a transportes personalizados ou à funcionalidade de protocolo, confira Estender a camada de canal.
Como estender o sistema de hospedagem de serviço
Para modificar o modelo de aplicativo de todo o serviço, é preciso estender a classe System.ServiceModel.ServiceHostBase. Para obter mais informações, confira Como estender o 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, é preciso estender a classe System.ServiceModel.Activation.ServiceHostFactory. Para obter mais informações, confira Como estender a hospedagem usando ServiceHostFactory.