我正在使用 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 部分以将其降低到该值(过去通常需要一分钟,因为每个服务都是按顺序打开的),但在我看来,这实际上可以快得多。
有人有什么建议吗?谷歌必应有大量托管一项服务的示例,但我在现实世界的应用程序中没有找到太多的例子(遗憾的是,“Hello World”对最终用户没有吸引力)。如果您当前通过 Windows 服务和 NetTCP 托管多个服务,您是如何做到的?