Я нахожусь в процессе написания приложения уровня предприятия, использующего службы WCF и NetTCP. Сначала я выбрал NetTCP из любопытства, но позже решил, что это лучший вариант для меня, поскольку у меня могут быть вызовы сервисов, которые требуют 5+ часов для возврата результатов из-за объема обработки данных.
То, как я в настоящее время создаю свои услуги, представляет собой многоэтапный процесс. У меня есть часть конфигурации (с использованием System.Configuration), в которой указаны некоторые элементы по умолчанию (номер порта, имя сервера для подключения клиентов, следует ли включать HTTP, а также NetTCP и т. д.), и в нем есть набор «сервисов». Это. Например, вот как выглядит базовый:
<serverConfiguration tcpListenerPortNumber="60000" httpGetEnabled="true" httpListenerPortNumber="6000" serverName="localhost" retryEnabled="true" retryInterval="5" maxRetryAttempts="3">
<services>
<add virtualDirectory="Service1" applicationName="Service1" assembly="SampleService" type="SampleService.Service1" />
</services>
</serverConfiguration>
По сути, здесь происходит то, что моя служба Windows запускается и просматривает все в коллекции ‹services/› и порождает поток для каждой службы, чтобы ускорить время запуска, и каждый поток содержит AppDomain, где служба действительно живет, поэтому, если служба имеет какой-либо вид по вине он не обрушивает систему.
«Проблема», с которой я сталкиваюсь, заключается в том, что в этом приложении размещено около 20 служб, и для запуска всех служб требуется 15-20 секунд. Я сделал части потоков и AppDomain, чтобы снизить его до этого значения (раньше это занимало больше минуты, так как каждый сервис открывался последовательно), но мне все еще кажется, что на самом деле это могло бы работать намного быстрее.
У кого-нибудь есть предложения? Google В Bing есть множество примеров для хостинга одной службы, но я не нашел много примеров для реальных приложений (к сожалению, «Hello World» просто не нравится конечным пользователям). Если вы в настоящее время размещаете несколько служб через службу Windows и NetTCP, как вы это делаете?