كيف يمكنني إرسال رسالة إعلام من خادم لجميع العملاء في صندوق رأس المال العامل (بث تستطيع أن تقول)؟

StackOverflow https://stackoverflow.com/questions/1006058

سؤال

وأريد أن أبعث رسالة إعلام كل ثانية من صافي خدمة برنامج التعاون الفني 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);
    }
  }
  );
}

وأنا قلق حول استدعاء الأسلوب الاستدعاء كعميل قد تغلق طلبه، لكني التعامل معها باستخدام الصيد المحاولة، خفض المهلة، وإرسال الزهر واسعة في موازاة ذلك، لذلك هو أن كافية؟

هل كانت مفيدة؟

المحلول

وسوف تحتاج إلى إعداد خدمة الاستدعاء. كتبت مبتدئين بسيط دليل ل حين يعود

نصائح أخرى

في أجل القيام بذلك، تحتاج إلى إنشاء وmantain قائمة جميع العملاء على اتصال (الممارسة العامة لFO هذا هو خلق طرق تسجيل الدخول والخروج لإنشاء وإدارة قائمة من وجوه تمثل زبائنك بالمواليد CallbackContext بهم). ثم، مع System.Time.Timers، يمكنك حلقة من خلال قائمة العملاء على اتصال وإرسال إعلام.

ونصيحة. هذه الطريقة يمكن أن تعمل أيضا كوسيلة من وسائل الاحتفاظ النشاط أو اسمع-فوز (إذا كان هذا ليس هو الغرض من ذلك حسب التصميم) وذلك بإضافة امكانية لإزالة العملاء من القائمة الخاصة بك إذا كانت الخدمة لا يمكن إرسال الاستدعاء لهم.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top