0

クラスでいくつかのイベントを発生させ、操作を行います。例えば

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を使用してこれを達成するにはどうすればよいですか? イベントを監視しているサービス クラスは単一のインスタンスであり、アプリケーションの起動時に初期化されることに注意してください。

これに対する解決策が得られることを願っています。より明確にするために私に知らせてください。

4

2 に答える 2

0
  1. 「サービス」をコンソールアプリではなくWidnowsサービスにします。
  2. MyService クラスを問題なく WCF サービスにすることができます。ただし、他のクラスを作成してサービス コントラクトをホストし、単に Windows サービスの実装と通信することもできます。
  3. Windows サービスのアクティブ化時間と最初の WCF 要求の間には関係がありません (これは IIS ではありません。これは自己ホスト型の WCF サービスであり、必要なときに開始します)。
  4. 自己ホスティング WCF サービス チュートリアルへのリンクは次のとおりです。
  5. 自動実行オプションを使用して、マシンに Windows サービスをインストールします。
于 2012-05-18T08:36:37.890 に答える
0

サービス クラスを WCF サービスにしようとしないでください。それをシングルトンにして、WCF に話しかけさせます。

イベントが監視アプリケーションに対して「イベント」を発生させたい場合は、二重バインディングを使用する必要があります (クロス マシンの場合は NetTcpBinding、同じマシンの場合は NetNamedPipeBinding をお勧めします)。監視アプリケーションが接続したら、そのコールバック チャネルを保存し、イベントに接続されたメソッドで、コールバック チャネルでコールバックします。

両側でセッションを維持する必要があるため、監視アプリケーションとサービスは、構成された receiveTimeout (デフォルトでは 10 分) よりも定期的に何かを相互に起動する必要がありますが、これは単純に「ping」メソッドを使用することもできます。キープアライブとして

少し前にデュプレックス通信についてブログを書きました。

于 2012-05-16T10:37:23.343 に答える