Видел, что некоторые Web-приложения работают с WCF-службами.
Например, видел, что работа с БД выносилась в WCF.
Насколько я понимаю, вы говорите о многослойной архитектуре. Есть такой подход, при котором браузер обращается к веб-серверу, веб-сервер обращается к бекэнду, а бекэнд - к БД.
Использовать такое разделение следует в том случае, когда
Сценариев появления подобной прослойки - два:
В приложении появляется компонент, который должен работать независимо от запросов пользователей. Например, какой-нибудь таймер, периодически обращающийся к другим сервисам в интернете. При этом оказывается, что он должен получать информацию от пользователей сразу же, а не путем периодического перечитывания БД.
После этого у такого компонента появляется WCF-интерфейс. А дальше архитектор решает, что проще всю работу с БД перенести в этот компонент чем решать проблемы с гонками и распределенными транзакциями.
Приложение надо масштабировать горизонтально (поставить второй веб-сервер), но в нем есть компонент, который должен быть общим для всех сессий (например, что-то SignalR-подобное). Этот компонент выносится в отдельную фоновую службу, а в веб-приложении остается интерфейс к нему. Дальше в тот же компонент "переезжает" работа с базой, чтобы избежать гонок и распределенных транзакций.
Ну и, разумеется, подобная прослойка может появиться заранее, если архитектор ожидает возможность подобной ситуации в будущем. Обычно именно в таком случае у разработчиков возникают вопросы "зачем тут лишний слой".
Если же речь была про Веб-WCF-службу, с которой идет работа из javascript, то это просто тяжкое наследие прошлого. Современные люди для этих целей используют ASP.NET WebApi.
Если же веб-служба находится в проекте MVC, но никакой клиентский скрипт с ней не работает - это форма внешнего API для интеграции с другими системами или подсистемами (см. SOA, сервисно-ориентированную архитектуру).
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости