Я бы сказал, третий. Я склонен думать о веб-сервисах как о другом уровне представления.
Подумайте об этом так: у вас есть веб-интерфейс, который вызывает код вашего бизнес-уровня для таких вещей, как создание нового пользователя (User.Add), поиск всех продуктов, соответствующих данному описанию (Products.FindByDescription) и т. Д. .
Теперь вы можете повторно использовать этот же код бизнес-уровня для создания набора общедоступных веб-сервисов, которыми могут воспользоваться третьи стороны. Может существовать метод, который добавляет пользователя - который вызывает ваш внутренний метод User.Add (), другой - для поиска товаров и т. Д.
Получается параллельный набор презентаций / интерфейсов с одними и теми же базовыми данными и бизнес-логикой.
За кулисами (полностью за пределами веб-служб или уровней пользовательского интерфейса) бизнес-уровень вызывает уровень доступа к данным, который заботится о физических запросах к базе данных. Если бы вам пришлось перейти на другую СУБД, в идеале вы (в теории) должны быть в состоянии перестроить слой данных для новой базы данных, и все должно работать просто.
Ваш бизнес-уровень содержит правила, например, имя пользователя должно быть длиной от 4 до 15 символов; пользователи могут только искать и загружать продукты, которые находятся в магазине, к которому у них есть доступ; и т.д.
Если вы решите изменить бизнес-правило - например, пользователю разрешено искать товары в любом магазине в его состоянии - тогда вы меняете его сразу, и вам не нужно прикасаться к веб-службе или пользовательскому интерфейсу, чтобы сделать это работает.