5

net tcp WCF サービスからすべてのクライアントに毎秒通知メッセージを送信したいのですが、ブロードキャストできますか?

役立つ回答の後

接続されているすべてのユーザーに通知(ハートビート)を送信する次のメソッドを作成しました

foreach (IHeartBeatCallback callback in subscribers)
{
  ThreadPool.QueueUserWorkItem(delegate(object state)
  {
    ICommunicationObject communicationCallback = (ICommunicationObject)callback;
    if (communicationCallback.State == CommunicationState.Opened)
    {
      try
      {
         callback.OnSendHeartBeat(_heartbeatInfo.message,    _heartbeatInfo.marketstart,_heartbeatInfo.marketend, _heartbeatInfo.isrunning,   DateTime.Now);
      }
      catch (CommunicationObjectAbortedException)
      {
        Logger.Log(LogType.Info, "BroadCast", "User aborted");
        communicationCallback.Abort();
      }
      catch (TimeoutException)
      {
       Logger.Log(LogType.Info, "BroadCast", "User timeout");
       communicationCallback.Abort();
      }
      catch (Exception ex)
      {
        Logger.Log(LogType.Error, "BroadCast", "Exception " + ex.Message + "\n" +  ex.StackTrace);
        communicationCallback.Abort();
      }

    }
    else
    {
      DeletionList.Add(callback);
    }
  }
  );
}

クライアントがアプリケーションを閉じる可能性があるため、コールバック メソッドを呼び出すことが心配ですが、try catch を使用して処理し、タイムアウトを減らし、ブロードキャストを並行して送信したので、それで十分ですか?

4

2 に答える 2

5

コールバックサービスを設定する必要があります。少し前に簡単な初心者向けガイドを書きました

于 2009-06-17T09:51:01.037 に答える
2

そのためには、接続されているすべてのクライアントのリストを作成して維持する必要があります (これを行うための一般的な方法は、LogIn および LogOut メソッドを作成して、CallbackContext を含むクライアントを表すオブジェクトのリストを作成および管理することです)。次に、System.Time.Timers を使用して、接続されたクライアント リストをループし、通知を送信できます。

ヒント。このメソッドは、サービスがクライアントにコールバックを送信できない場合にリストからクライアントを削除する可能性を追加することで、Keep-Alive または Hear-Beat メソッドとして機能することもできます (これが設計上の目的でない場合)。

于 2009-06-17T09:46:05.853 に答える