1

私は、WCFおよびNetTCPサービスを利用するエンタープライズレベルのアプリケーションを作成中です。私は最初は好奇心からNetTCPを選択しましたが、データ処理の量が多いために結果を返すのに5時間以上かかると呼ばれるサービスを利用できるため、後でそれが最善の選択肢であると判断しました。

私が現在サービスを生み出す方法は、複数のステップからなるプロセスです。いくつかのデフォルトのもの(ポート番号、接続しているクライアントのサーバー名、HTTPとNetTCPを有効にするかどうかなど)を指定し、その下に「サービス」のコレクションがある構成ピース(System.Configurationを使用)がありますそれ。たとえば、基本的なものは次のようになります。

<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の部分を実行して、その値に下げました(各サービスが順番に開かれるため、1分以上かかりました)が、実際にははるかに高速になる可能性があります。

誰か提案がありますか?Google Bingには、1つのサービスをホストするための例がたくさんありますが、実際のアプリケーションについてはあまりわかりません(残念ながら、「HelloWorld」はエンドユーザーにとって魅力的ではありません)。現在、WindowsサービスとNetTCPを介して複数のサービスをホストしている場合、どのように行っていますか?

4

2 に答える 2

1

最終的にそれを理解しましたが、結局、WCF や構成要素とは何の関係もありませんでした。AppDomain を作成していたときに、サイズがはるかに小さい別のプロジェクトからコードを盗み、AppDomains を作成するセクションで SingleDomain オプションが使用されていることがわかりました。これを MultiDomain に変更すると、合計負荷が 4 秒を超え、メモリ使用量が 150MB から 40MB に減少しました。

助けてくれてありがとう - 少なくとも、コードをもう一度見直すことができました!

于 2009-06-25T21:26:46.310 に答える
0

私は3つの提案があります:

まず、通話に5時間以上かかる場合は、キューイング/コールバックスタイルのアーキテクチャを検討します。

サービスを20のWindowsサービスに分割することを検討してください。各サービスは、独自のWindowsサービスで実行されます。これにより、複雑さが増し、メモリ使用量が増加しますが、個々のサービスをより速く利用できる場合があります。

最後に、不要なコードがないか、サービスのコンストラクターにあるコードを確認します。

于 2009-06-20T22:19:54.203 に答える