Это проблема, с которой я боролся много раз, и на самом деле нет лучшего ответа, кроме как зависит. Мое личное мнение таково, что вам нужно держаться подальше от варианта 1 по нескольким причинам:
- Если все ваши клиенты будут использовать один двоичный файл, теперь потребуется проверять всех ваших клиентов каждый раз, когда вы вносите в него изменения. Теперь я знаю, что в вашем конкретном случае вам, возможно, придется делать это в любом случае, поскольку мы можем предположить, что вы будете изменять базу данных, которая находится за компонентом.
- Не кодируйте ничего жестко. Вы можете сохранить свой путь конфигурации в разделе AppSettings в файле machine.config.
Что касается варианта 2, одной из альтернатив будет использование WCF (при условии, что ваша среда может его поддерживать). Используя WCF, вы можете затем использовать транспорт TCP с использованием двоичной сериализации (и там может быть транспорт с общей памятью). И то, и другое поможет сократить разрыв в производительности (хотя вариант 1 всегда превосходит подход, основанный на обслуживании).
Переходя к варианту 2, вы также избавляете от необходимости повторного тестирования всех клиентов, поскольку вы можете разработать автоматические тесты для проверки того, что ваш контракт не нарушен. Это позволит вам публиковать в одном месте, запускать быстрые автоматизированные тесты и знать, что вы не взламываете клиентов.
С учетом сказанного вы можете выполнить то же самое, используя вариант 1 и хороший набор модульных тестов, но, основываясь на моем опыте, вариант 2 будет проще в долгосрочной перспективе.
Вариант 2 также позволяет вам масштабировать сервис в будущем, если вам когда-либо понадобится больше ресурсов процессора.
Лично я считаю, что вариант 1 проще в настройке, так как вам не придется заниматься настройкой брандмауэра, обработкой аутентификации, настройкой службы и т. Д. Также будет легче отлаживать (распространение приложения приводит к появлению новых типы сбоев, например, происходит сбой сайта, на котором работает ваша служба, и ваши клиенты начинают получать сбои).
Последнее предложение заключается в том, что вы используете прокси / шаблон фасада, чтобы изолировать ваших клиентов от фактического местоположения службы. Это позволит вам расширяться со временем без необходимости изменения клиентского кода.