1

私はWCFとNetTCPサービスを利用してエンタープライズレベルのアプリケーションを作成しています。最初は好奇心からNetTCPを選択しましたが、後でそれが私にとって最良の選択肢であると判断しました。これは、関連するデータ処理のために結果を返すために5時間以上かかるサービスを呼び出すことができるからです。WCFセルフホスティングのパフォーマンス

私の現在のサービスを呼び出す方法は、複数のステップからなるプロセスです。私は、いくつかのデフォルトのもの(ポート番号、接続するクライアントのサーバー名、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サービスがキックオフされ、<サービス/ >コレクションにすべてのものを見て、起動時間を高速化するサービスごとにスレッドをオフに生成します各スレッドにサービスが本当に存在するAppDomainが含まれています。サービスに何らかの障害があると、システムが停止しません。

私が実行している「問題」は、このアプリケーションが約20のサービスをホストしていることと、すべてのサービスが起動して実行されるのに15-20秒かかることです。私はスレッディングとAppDomainの部分を(各サービスが順番に開かれるにつれて1分以上かかっていた)その値にまで落としましたが、これは実際にはもっと速く進むかもしれません。

誰もが何か提案がありますか? Google Bingには1つのサービスをホスティングするための例がたくさんありますが、現実のアプリケーションではそれほど多くは見つけられません(悲しいことに、「Hello World」はエンドユーザーにとって魅力的ではありません)。現在、WindowsサービスとNetTCPを介して複数のサービスをホストしている場合、どうしていますか?

+0

これより速くする必要がありますか? 1日に1回しか起動しない場合は、1日20秒です。それは長い時間ではありません。 –

+0

これは主にデバッグ中に遅くなるため、パフォーマンスを圧迫しようとしている主な領域です。サービス自体は無期限に実行されます(リブートなどを除いて)。 – RubyHaus

答えて

1

私はそれを最終的に考え出しました。結局のところ、WCFや設定ファイルとは関係ありませんでした。私がAppDomainを作成していたとき、私が持っていた別のプロジェクトのコードを盗んだのは、サイズがはるかに小さく、AppDomainsを作成するセクションがSingleDomainオプションを使用していることが分かりました。 MultiDomainに変更すると、負荷が4秒以上になり、メモリ使用量が〜150MBから〜40MBに減少しました。

ご協力ありがとうございます - 少なくとも私はコードをもう一度見直しました!

0

私は3件の提案があります:呼び出しが5+時間を取ることができるかどう

まず、私はスタイルのアーキテクチャをコールバック/キューイングを検討するが。

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

最後に、不要なコードについては、サービスのコンストラクターにあるコードをチェックします。

+0

20サービスは本当に実現可能ではありません - 特にデバッグの観点から。私たちはまだ開発中ですが、私は10-20のサービスがまだ構築されていないと推測しています。そのようなものの複雑さは、保守の観点から簡単にチャートから外れる可能性があります。 – RubyHaus

+0

すべてのサービスが同じフレームワーク上に作成され、同じインフラストラクチャ、命名規則などが使用されている場合、これはメンテナンスの問題になるのですか?同じロギング技術、構成などを意味します。同一ではない1つまたは2つより維持することが困難である。 –

+0

さて、多くのサービスはお互いを利用しています(つまり、他の人に電話する必要があります)。本当にエンドポイントではなく、単一の "エンドポイント"あなたは私のポイントを得る)。言うまでもなく、40のWindowsサービスは、過大な負荷のように思えます。特に、コアの部分が変更された場合、これらのDLLをすべての場所に展開する必要があります。私はGACを中核とすることができましたが、それでもやはり過剰な過労のようです。 – RubyHaus

関連する問題