我正在使用WCF和NetTCP服务编写企业级应用程序。我最初出于好奇而选择了NetTCP,但后来确定它是我的最佳选择,因为我可以使用被称为需要5个小时以上的服务来返回结果,因为涉及的数据量很大。

我目前产生服务的方式是一个多步骤的过程。我有一个配置文件(使用System.Configuration),它指定了一些默认的东西(端口号,连接客户端的服务器名称,是否启用HTTP以及NetTCP等),并且有一个<!>集合的集合;服务QUOT <!>;在它下面。例如,这是基本的:

<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服务启动并查看<!> lt; services / <!> gt;中的所有内容。收集并生成每个服务的线程以加快启动时间,每个线程包含一个AppDomain,服务真正存在,所以如果服务有某种故障,它不会导致系统崩溃。

<!>“问题<!>”;我遇到的是这个应用程序正在托管大约20个服务,所有服务启动和运行需要15-20秒。我做了线程和AppDomain片段以使其达到该值(过去每个服务按顺序打开需要花费一分钟),但在我看来,这实际上可以更快。

有人有什么建议吗? 谷歌 Bing有很多用于托管一项服务的例子,但是我找不到真正的应用程序(遗憾的是<!>“Hello World <!>”;只是不是吸引最终用户)。如果您目前通过Windows服务和NetTCP托管多项服务,您是如何做到的?

有帮助吗?

解决方案

我终于弄明白了,毕竟它与WCF或我的配置文件无关。当我创建AppDomain时,我从另一个项目中窃取了代码,这个项目的大小要小得多,并且发现创建AppDomains的部分使用的是SingleDomain选项。将其更改为MultiDomain会使事情变为<!> gt;总负载为4秒,内存使用率从~150MB降至约40MB。

感谢您的帮助 - 至少它让我再次审查了代码!

其他提示

我有三个建议:

首先,如果通话需要5个多小时,我会考虑排队/回拨风格的架构。

考虑将您的服务拆分为20个Windows服务,其中每个服务都在其自己的Windows服务中运行。这增加了复杂性并增加了内存使用量,但可以更快地获得单个服务。

最后,检查服务的consructor中的代码,以查找任何不需要的代码。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top