2011-06-27 13 views
1

私が作成した2つのWindowsサービスの間に依存関係を作成するにはどうすればよいですか? ServiceAはSystemAにインストールされ、ServiceBはSystemBにインストールされます。別のマシンで実行されている2つのWindowsサービス間の依存関係を作成するにはどうすればいいですか?

ServiceAが稼働している場合は、ServiceBだけを起動する必要があります。

私は両方のマシンが同じマシンだと分かりますが、マシンが異なるので、私はここでこだわっています。

+0

依存関係が重複していますか?ServiceBが枯渇した場合、ServiceAは停止するはずですか? –

+0

いいえ。丸ではありません。それは循環依存を引き起こすでしょう。 – Asdfg

+0

ServiceBの依存関係となるServiceBマシン用のServiceXを作成します。これはネットワーク経由でServiceAにpingを実行するためのものです。これは、ServiceAがあまりにも遅く始まると、未定義の動作になります。 –

答えて

1

単にTCPまたはRemotingまたはWCF経由でserviceBを呼び出すのはどうですか?サービスが応答しない場合は、serviceAを終了します。およびその逆。

この方法は、あなたが同じマシン上にいる場合でも、世界中にいる場合でも機能します。

+0

あなたは正しいです。私はそれを行う必要がありますが、私はServiceAのAPIを公開することはできません。 – Asdfg

+0

@Asdfg元の質問に対するあなたのコメントごとに、あなたは既にコマンドを聞くポートを持っています。これらのコマンドの1つはAreYouAliveです。それに応答すると、ServiceBはそれに応じて行動し、それ自身を起動します。 – AngryHacker

+0

ポート上で送信されるコマンドではありません。それをカスタムMSMQシステムと考えてください。 ServiceAが停止している場合、ServiceAはポート上で送信されたメッセージを受信します。 ServiceAが起動して実行される瞬間に、カスタムMSMQシステムに加入し、カスタムMSMQシステムはServiceAにメッセージを1つずつ送信します。唯一の方法はWCFに公開し、AreYouAliveを呼び出すことです。 – Asdfg

0

私はこれを行う方法があるとは思わない。依存関係リストは、ローカルサービス名を参照するヌル区切りストリングのリストとしてレジストリーに埋め込まれます。ローカルサービス名はローカルサービスEXEまたはDLLを指すことのみが許可されているので、サービスマネージャのサービス依存関係フレームワークを使用してこれを行うことはできません。

関連する問題