2009-09-01 7 views
2

私は2つのWindowsサービスを実行しているとしましょう。 1つのサービスは「ポーリング」です。データベースは印刷ジョブ用にポーリングされます。新しい印刷ジョブが見つかるとすぐに、別のサービス - 「印刷」 - がジョブをプリンタに送信する必要があります。Windowsサービス同士の相互作用はどのようにできますか?

(私は1つのサービスでそれを行うことができない理由は別ですが、その理由があるとしましょう)。

私が持っている簡単な解決策は、印刷ジョブを作成してどこかのファイルに保存し、その印刷場所を監視してファイルを読み取り、印刷ジョブを実行する 'Printing'サービス。

「ポーリング」サービスから何らかの形で「印刷」機能を呼び出すことは可能ですか?

開発ツールは、.NET 3.5/C#であれば問題ありません。

答えて

3

はい、WCFを使用すると、サービス間での通信が可能になります。 NetNamedPipesバインディングは、ローカルでの同じボックス通信に適しています。

+0

NetNamedPipeBindingは、WCFを自由に使用できるときにプロセス間通信を容易にする方法です。 – bobbymcr

+0

わかりやすく見えるので、私は既に小さな作業サンプルを実行しています。 – Evgeny

4

これは、標準のIPCの問題だと猫肌にする方法があるとして多くのソリューションがあります:message queueがあるかもしれないように聞こえるあなたの具体的な例について、ソケット、パイプ、ファイル、マップされたメモリなど

は、良い解決策。最初のサービスはジョブをキューに書き込むことができ、2番目のサービスは便利なときにジョブを読み取ることができます。これは、プリンタがビジー状態、オフライン状態などに陥っているような状況に対処します。

+0

はい、絶対に正しい - それを行うための多くの方法。彼が記述したFileSystemWatcherクラス(http://msdn.microsoft.com/en-us/library/system.io.filesystemwatcher.aspx)の使用は、キューのように機能します。別のオプションは、サービスが同じボックスにあるため、IPCのOS Mutexです。こんにちはperf、データ転送では大したことはありません。ファイルドロップと組み合わせれば、単なるものかもしれません。どのスキルを選択するかは、スキルの問題、bbuildしたいスキル、将来のシステムの進化などです。パフォーマンスは問題になりません。 – Cheeso

関連する問題