Gostaria de perguntar qual modelo de interação você precisa apoiar? Sua interface externa desejada se assemelha mais a RPC ou REST? Na minha experiência, geralmente está em algum lugar, mas principalmente um ou outro.
Você está consumindo seus próprios serviços para outros projetos no .Net? Esta é provavelmente a pergunta mais reveladora que você pode fazer. O WCF tem a vantagem de poder abstrair suas interfaces em uma biblioteca de classes separada e ser capaz de construir e injetar seu cliente. Como uma extensão para isso, você pode montar seu projeto baseado em WCF com nós de extremidade JSON e SOAP / WSDL, eu fiz isso. O WCF também oferece melhores garantias contra suas interfaces definidas.
Dito isso, se você espera ter clientes de outras plataformas XML em geral, muito menos o SOAP tem uma sobrecarga mensurável além do que os pontos de extremidade JSON simples possuem. Se você seguir a rota da API JSON / Web, precisará se tornar muito melhor em documentar como interagir com seus endpoints e com a API.
Em geral, sugiro escrever um documento de API simples que declare como você enviará dados e como deseja uma resposta para uma única estrutura de objeto de solicitação. Escreva seu caso de teste da maneira mais universal e documente-o como tal. Eu recomendaria uma declaração de onda simples. Em seguida, faça com que vários de seus membros implementem isso usando o WCF e com a API da Web. Então veja quais vitórias.
Pessoalmente, apesar de ter feito alguns projetos e implementações relativamente grandes com o WCF, eu realmente me inclino para a implementação mais simples que na minha cabeça é na verdade o WCF com o uso de resultados JSON e algum comportamento de sobreposição no Global.asax.cs para lidar com condições de erro. Se a documentação de uma API incluir instruções curl e você puder exercitar toda a funcionalidade de sua API com exemplos de curvas, será muito mais fácil para os clientes serem implementados em qualquer idioma que suporte interfaces da web. Isto é realmente onde o WCF começa a cair. Ter uma API bem definida com documentação agnóstica é melhor do que ter estruturas com ferramentas automatizadas ao lidar com sistemas externos. Falando como consumidor desses sistemas de outras plataformas.
Uma coisa além disso, é implementar seu cliente em dois idiomas diferentes. Faça um cliente em C #, mas também faça um em Node.js ou em Python e veja como eles realmente se encaixam. Esse exercício sozinho ajudará você a sacudir as pontas soltas da sua API.