6

WCFの基本的で簡単に解決できる問題に固執しているので、正しい方法に導く必要があります。

C#.NETのWebサービスを介して公開する必要のある大きなオブジェクト(実際にはトレーニング済みのテキスト分類子)があります。分類子オブジェクトは、サービスの最初の開始時にディスクからロードできますが、リクエストごとにディスクからロードし続けたくありません(サービスがリクエストするオブジェクトは、現在メモリ内で約6 GBを占めており、保持するのに時間がかかりますリクエストごとにディスクからロードする)ので、代わりに、そのWebサービスへのすべてのリクエストの間、そのオブジェクトをメモリに保持したいと思います。オブジェクトは、サービスの開始時にのみロードする必要があります(最初のWebリクエストがトリガーしたときにロードするのではありません)。 )。

どうすればいいですか?

助けてくれてありがとう!

4

2 に答える 2

5

おそらく最も簡単な方法は、サービスをシングルトンとして作成することです。これには、サービスクラス定義InstanceContextMode = InstanceContextMode.Singleの属性での指定が含まれます。ServiceBehavior

ただし、WCFを使用して6GBのオブジェクトをネットワーク経由で送信することをお勧めするかどうかは非常に疑わしいです。このアプローチでは、あらゆる種類のサービス可用性の問題が発生する可能性があります。

さらに、シングルトンはホスト内でスケーラブルではありません(ホストごとに1つのインスタンスのみにすることができます)が、複数のシングルトンサービスをホストして、要求の負荷を分散することはできます。

于 2012-10-04T09:33:46.667 に答える
3

過去に問題が発生したプロジェクトでこれを行った方法は、Windowsサービス内でWCFサービスをセルフホストすることです。

次に、データストレージオブジェクトを、サービスの存続期間中存続するシングルトンとしてサービス内に設定しました。その後、各WCFサービス呼び出しは、データに対して何かを行う必要があるたびにシングルトンを取得します。

サービスの存続期間を直接制御できず、したがって、処理とインスタンス化のタイミングを十分に制御できないという理由だけで、IISでの実行は避けたいと思います。

于 2012-10-04T09:37:02.533 に答える