2012-01-18 3 views
0

У нас есть приложение с несколькими сервисами. Мы переместили метод, который включает доступ к БД к отдельному компоненту, который отображается конечной точкой WCF.
У нас есть 2 варианта:
1. Запрос WCF на метод.
2. Вызовите непосредственно метод, разрешенный нашим двигателем DI.
Производительность системы является критичной проблемой, поэтому мы хотим переключиться между вариантом 1 и вариантом 2 через конфигурационный файл без перекомпиляции клиентского приложения.
Любые советы или предложения по этой идее/архитектуре?Любые советы или предложения по этой идее/архитектуре?

ответ

1

Вы можете научить Unity разрешать услуги WCF по интерфейсу. Поэтому не имеет значения, разрешите ли вы локальную реализацию вашей службы или WCF. Вы всегда будете вводить IMyService в свои классы. Это просто изменение вашей конфигурации.

Вы можете настроить расширение использования app.config или открытие WCF или явно указать Binding и EndpointAddress в коде.

Дополнительную информацию см. На сайте TecX project. Исходный код находится в TecX.ServiceModel.AutoMagic. Некоторые тесты, демонстрирующие использование можно найти в TecX.ServiceModel.Test


Update

Определить интерфейс для вашей службы (например, IMyService) и украсить ее необходимыми атрибутами (DataContract, OperationContract). Внедрить этот интерфейс (например, в классе MyService). MyService называет ваш метод. Теперь скажите Unity либо карту IMyService непосредственно к MyService или добавить расширение контейнера, который позволяет отображать IMyService через прокси-сервер, порожденного WCF ChannelFactory. Разверните свой сервис, и все готово. Unity будет внедрять любую реализацию IMyService в конструкторы тех классов, которые в них нуждаются.

+0

«Мы хотим переключиться между опцией 1 и опцией 2 через конфигурационный файл без перекомпиляции клиентского приложения« Я знаю, что знаю компромиссы, главное, как я могу реализовать эту архейдерку.? – shahzad

+0

Отличное описание .... Себастьян Вебер ..... Спасибо .... – shahzad

+0

@shahzad Если бы мой ответ был полезным, было бы здорово, если бы вы могли отметить его как таковой. –

1

Я думаю, вам следует избегать дополнительного слоя WCF, если производительность системы является критической проблемой, и нет никаких других требований, управляющих дизайном таким образом. Вы можете выполнить некоторые тесты производительности, чтобы увидеть, будет ли их накладные расходы приемлемыми для вас. В конце концов вы можете решить, какой вариант лучше для вас, и поэтому удалите необходимость переключения.

+1

Если есть необходимость в некоторых функциях WCF (например,зашифрованные вызовы, аутентификацию, распространение идентификационных данных, голосование по транзакциям, авторизацию, аудит безопасности, распространение транзакций, тайм-аут вызовов, надежность, долговечность, маскирование ошибок, изоляцию ошибок, буферизацию и дросселирование, допуск к версии версий данных, удаленное взаимодействие, взаимодействие, очередность, обнаружение, .. .) WCF - лучший выбор, который вы можете сделать. Никакая другая структура на рынке не может конкурировать с ее производительностью. –

+0

Да, но только если есть необходимость ... – henginy

Смежные вопросы