كيف يمكنني إرسال رسالة إعلام من خادم لجميع العملاء في صندوق رأس المال العامل (بث تستطيع أن تقول)؟
-
06-07-2019 - |
سؤال
وأريد أن أبعث رسالة إعلام كل ثانية من صافي خدمة برنامج التعاون الفني 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، يمكنك حلقة من خلال قائمة العملاء على اتصال وإرسال إعلام.
ونصيحة. هذه الطريقة يمكن أن تعمل أيضا كوسيلة من وسائل الاحتفاظ النشاط أو اسمع-فوز (إذا كان هذا ليس هو الغرض من ذلك حسب التصميم) وذلك بإضافة امكانية لإزالة العملاء من القائمة الخاصة بك إذا كانت الخدمة لا يمكن إرسال الاستدعاء لهم.