質問

私は、WCFおよびNetTCPサービスを利用するエンタープライズレベルのアプリケーションを作成しています。最初は好奇心からNetTCPを選択しましたが、データのクランチの量が原因で結果を返すのに5時間以上かかるサービスを呼び出すことができるため、後でそれを自分にとって最適なオプションと判断しました。

現在サービスを生成する方法は、複数のステップからなるプロセスです。いくつかのデフォルトのもの(ポート番号、接続するクライアントのサーバー名、HTTPおよびNetTCPを有効にするかどうかなど)を指定し、<!> quotのコレクションを持つ構成部分(System.Configurationを使用)があります; services <!> 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が含まれているため、サービスに何らかの障害が発生してもシステムがダウンすることはありません。

<!> quot;問題<!> quot;私が実行しているのは、このアプリケーションが約20のサービスをホストしており、すべてのサービスが起動して実行されるまでに15〜20秒かかることです。スレッド化とAppDomainの部分を実行して、その値まで下げました(各サービスが順番に開かれるのに1分以上かかりました)が、実際にはもっと速くなる可能性があるようです。

何か提案はありますか? Google Bingには1つのサービスをホストするための例がたくさんありますが、実際のアプリケーションについてはあまり見当たりません(残念ながら<!> quot; Hello World <!> quot;はそうではありませんエンドユーザーにアピールします)。現在、WindowsサービスとNetTCPを介して複数のサービスをホストしている場合、どうしますか?

役に立ちましたか?

解決

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

しかし、支援に感謝します-少なくとも、コードを再検討しました!

他のヒント

3つの提案があります:

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

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

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top