Обход WCF с прямыми вызовами DLL в однопользовательской среде - PullRequest
0 голосов
/ 14 декабря 2009

Я помогаю компании с программным пакетом, который будет гибко поддерживать несколько сценариев развертывания. Пакет написан на .NET, имеет четко определенный BLL и использует SQL Server для базы данных.

Проект требует четкого разграничения между доступом к данным и службами (BLL) и пользовательским интерфейсом. На данный момент существует как минимум два интерфейса пользователя (WinForms и Web). Мы предлагаем решение WCF для запуска слоя BLL, который можно запустить на мощном сервере приложений. Этот путь довольно хорошо обозначен и понятен на этом этапе и охватывает один из наших необходимых сценариев развертывания.

Сценарии развертывания (в произвольном порядке):

  1. Большая многопользовательская среда с 1-n серверами приложений, все из которых имеют выделенный SQL-сервер подходящего размера.

  2. Многопользовательская среда, выполняющая пользовательский интерфейс / BLL на компьютере каждого отдельного пользователя, все обращаются к общему серверу SQL.

  3. Однопользовательская среда с одним компьютером, на котором выполняется все приложение на своем компьютере (включая SQL-сервер).

Меня беспокоит не столько сценарий (1), сколько (2) и (3). Если развертывание относится к типу (2) или (3), WCF на самом деле ничего не купит в этот момент и снизит производительность. Может ли кто-нибудь предложить способ, которым приложение может быть спроектировано так, чтобы при развертывании в сценарии (1) оно использовало BLL, работающий на сервере приложений, но в (2) или (3), где большинство, если не весь стек, находится на одной машины, WCF можно обойти с помощью более традиционных звонков на BLL?

Логика BLL останется неизменной между всеми сценариями. Как раз в (2) или (3) я хотел бы загрузить DLL BLL в память с прямыми вызовами к ней без необходимости проходить через WCF.

Я очень ценю любые советы сообщества по этому вопросу!

Ответы [ 2 ]

1 голос
/ 14 декабря 2009

Можно рассмотреть нулевую транспортную привязку из этого проекта CodeProject . Предоставляет вам одинаковую семантику в каждом случае, то есть с использованием WCF, но без накладных расходов в случаях (2) и (3).

0 голосов
/ 02 января 2012

Используйте именованные трубы в качестве транспорта. Это по-прежнему даст вам издержки на сериализацию, но это довольно мало.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...