Uma das possibilidades que temos ao construir um serviço WCF, é a capacidade de enviar mensagens conhecidas como one-way. Quando você tem operações que não retornam valores e, principalmente, o cliente não está interessado no sucesso ou falha da mesma, podemos recorrer à esta técnica. Ela permite que o proxy envie a mensagem ao seu destino, sem esperar pela sua execução. Há um bloqueio mínimo do lado do cliente, que é apenas necessário para que o proxy mande a mensagem e o serviço a enfileire. A partir daí, o cliente está livre para dar continuidade na execução do programa.
Dependendo do problema que ocorra, o retorno pode ser imediato, como acontece quando o respectivo endpoint não é encontrado, e dificilmente você notará esse bloqueio. Já em outros casos, quando a quantidade de informação enviada ao serviço é muito grande, isso também pode demorar a retornar, o que pode gerar uma má experiência (bloqueio) ao usuário. Outro problema que é muito comum, é quando você define o modelo de sincronização como Single e utiliza um binding que dá suporte à sessões, obrigando ao serviço (dispatcher) assegurar a entrega das mensagens de forma ordenada, impossibilitando que outra mensagem seja lida até que o processamento da mensagem atual seja completada.
Uma forma de contornar esse tipo de problema é trabalhar com mensagens assíncronas, como é mostrado aqui. Isso evitará a necessidade do cliente ficar aguardando até que a mensagem one-way seja efetivamente entregue ao serviço, mas como um ponto negativo, que é a saturação do ThreadPool, dependendo do volume de requisições que são realizadas. Outra alternativa é definir o gerenciamento de instância do serviço como PerCall e com modo de sincronização Multiple, onde cada requisição será atendida por uma instância diferente e podendo mais que uma thread enviar as mensagens.