クラスでいくつかのイベントを発生させ、操作を行います。例えば
class MyService
{
EventHandler MessageSent;
EventHandler StatusReceived;
public void StartService(Serviceconfig configObject)
{
//Intialize serial port with OnSerialPortReceived event handler.
}
public void GetStatusForMessage(string messageID)
{
}
public void OnSerialPortReceived(string data)
{
if(data=="123")
MessageSent(this,null);
if(data=="456")
StatusSent(this,null);
}
}
これはコンソール アプリケーションで、システムの起動時に開始されます。ここで、イベント サービスで何らかのイベントがトリガーされたときに、監視アプリケーション (基本的にはコールバックを備えたクライアント) が必要です。そのためには、WCF を使用する必要があります。また、監視アプリケーションはサービス クラスを呼び出します。上記の例では、GetStatusForMessage メソッドが監視アプリケーションによって呼び出されます。それでは、WCF を使用してどのように実装できますか。上記のクラスをサービス コントラクトでサービスとして作成すると、クライアントが呼び出しを開始するまで初期化および開始されません。このクラス オブジェクトは、システムが再起動するたびに初期化され、その機能を開始します。
この記事http://msdn.microsoft.com/en-us/magazine/cc163537.aspxを見つけました。このアプローチにより、私のサービスはパブリッシャー クライアントになり、監視アプリケーションはサブスクライバー クライアント アプリケーションになります。ただし、クライアントはサービス クラスを呼び出す必要があります。したがって、私のクライアント アプリケーションは両方のコールバックをサポートする必要があり、サービス メソッドを呼び出すこともできる必要があります。WCFを使用してこれを達成するにはどうすればよいですか? イベントを監視しているサービス クラスは単一のインスタンスであり、アプリケーションの起動時に初期化されることに注意してください。
これに対する解決策が得られることを願っています。より明確にするために私に知らせてください。