Обработка бизнес-логики WCF - PullRequest
0 голосов
/ 13 апреля 2010

У меня есть служба WCF, которая поддерживает около 10 контрактов, мы поддерживали клиента со всеми бизнес-правилами, характерными для этого клиента, теперь у нас есть другой клиент, который будет использовать точно такие же контракты (поэтому мы не можем их изменить), они будет вызывать службу точно так же, как предыдущий клиент звонил сейчас, единственный способ, которым мы можем различить двух клиентов, - это один из входных параметров. Основываясь на этом входном параметре, мы должны использовать немного другую бизнес-логику - логика для обоих клиентов будет одинаковой в 50% случаев, когда у остальных будет другая логика (для уровней Business / DAL). Я не хочу использовать оператор if в каждой из реализаций контракта, чтобы дифференцировать и перенаправлять логику, а также то, что, если приходит другой клиент. Существует ли чистый способ обработки ситуации, подобной этой. Я использую фреймворк 3.5. Как я уже сказал, я не могу изменить ни один из контрактов (контракт на обслуживание / передачу данных) или текущую инфраструктуру вызова сервиса для нового клиента. Спасибо

Ответы [ 2 ]

0 голосов
/ 13 апреля 2010

Не могу сказать, применимо ли это к вам, но мы решили похожую проблему по этому пути:

  • Мы добавляем информацию заголовка к сообщению, в которой говорится, в каком контексте вызывается некоторая логика.
  • Эта информация попадает в класс RequestContext.
  • Мы делегируем ответственность за реализацию реализации контракта DI-контейнеру (в нашем случае StructureMap)
  • Мы определили стратегию, как определенные компоненты должны предоставляться контейнером:
    • Для компонента какого-либо типа есть значение по умолчанию.
    • Атрибуты могут быть помещены в специализации, которые обозначают, для какого типа контекста запроса должна использоваться эта специализация.
  • Это регистрируется в контейнере через доступные механизмы
  • Мы звоним в Контейнер с указанием ObjectFactory.With(requestcontext).getInstance<CONTRACT>()
  • Зависимости реализаций службы теперь разрешаются способом, которым применяется описанный процесс. То есть специализации предоставляются в конечном итоге на основе информации запроса, помещенной в заголовок.

Это пример того, как это можно решить.

0 голосов
/ 13 апреля 2010

Можете ли вы разместить хосты дважды и подключить клиентов к нужному? Кроме того, я полагаю, вы должны использовать что-то вроде if-else.

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