Когда в ASP.NET MVC стоит прибегать к WCF?

402
17 февраля 2017, 01:02

Видел, что некоторые Web-приложения работают с WCF-службами.

  1. Когда такая практика оправдана?
  2. Не имеет ли MVC каких-то слабых сторон, которые закрывают WCF? Или все может быть реализовано в Web-приложения, а использовать WCF-это личные предпочтения и вопросы удобства?

Например, видел, что работа с БД выносилась в WCF.

Answer 1

Насколько я понимаю, вы говорите о многослойной архитектуре. Есть такой подход, при котором браузер обращается к веб-серверу, веб-сервер обращается к бекэнду, а бекэнд - к БД.

Использовать такое разделение следует в том случае, когда

  1. во-первых, ваше приложение имеет архитектуру по типу событийно-ориентированной, и общей базы данных не достаточно для общения компонентов приложения между собой;
  2. во-вторых, у вас есть несколько этих самых компонентов, которым надо между собой общаться.

Сценариев появления подобной прослойки - два:

  1. В приложении появляется компонент, который должен работать независимо от запросов пользователей. Например, какой-нибудь таймер, периодически обращающийся к другим сервисам в интернете. При этом оказывается, что он должен получать информацию от пользователей сразу же, а не путем периодического перечитывания БД.

    После этого у такого компонента появляется WCF-интерфейс. А дальше архитектор решает, что проще всю работу с БД перенести в этот компонент чем решать проблемы с гонками и распределенными транзакциями.

  2. Приложение надо масштабировать горизонтально (поставить второй веб-сервер), но в нем есть компонент, который должен быть общим для всех сессий (например, что-то SignalR-подобное). Этот компонент выносится в отдельную фоновую службу, а в веб-приложении остается интерфейс к нему. Дальше в тот же компонент "переезжает" работа с базой, чтобы избежать гонок и распределенных транзакций.

Ну и, разумеется, подобная прослойка может появиться заранее, если архитектор ожидает возможность подобной ситуации в будущем. Обычно именно в таком случае у разработчиков возникают вопросы "зачем тут лишний слой".

Если же речь была про Веб-WCF-службу, с которой идет работа из javascript, то это просто тяжкое наследие прошлого. Современные люди для этих целей используют ASP.NET WebApi.

Если же веб-служба находится в проекте MVC, но никакой клиентский скрипт с ней не работает - это форма внешнего API для интеграции с другими системами или подсистемами (см. SOA, сервисно-ориентированную архитектуру).

READ ALSO
Как узнать размер объекта?

Как узнать размер объекта?

Какие есть способы получить размер объекта в памяти? Можно не обязательно в рантайме (кодом)

429
Как устранить конфликт? [требует правки]

Как устранить конфликт? [требует правки]

Как устранить конфликт?

364
EntityFramework работа с базой в библиотеке

EntityFramework работа с базой в библиотеке

Я только начинаю вникать в EntityFramework и у меня сразу возникло множество вопросовВот некоторые из них

363