مرحبا ديفيد،
لقد قمت بإنشاء تطبيق دردشة باستخدام signalR تمامًا مثل دردشة facebook ، والآن أريد الاحتفاظ ببيانات محادثة الدردشة في قاعدة بيانات وأريد عرض هذا السجل لغرفة الدردشة المتوافقة معها ، هل يمكنك من فضلك توجيه كيفية أرشفة ذلك؟ هل تدعم SignRe الاتصال بخادم SQL؟
هل يمكنك أيضًا إرشادك كيف يمكنني الاحتفاظ بمعرف الاتصال حتى أتمكن من إعادة تهيئة الدردشة بعد إعادة النشر تمامًا مثل تطبيق الدردشة على facebook.
بادئ ذي بدء ، إذا كنت تبحث عن مساعدة ، فقط قل أنك تبحث عن المساعدة. أنت لا تعرف شيئًا ما ، فهذا لا يعني أن SignalR لا تدعمه أو أنها مشكلة.
النقطة الأساسية هي أنك لا تهتم بمعرف الاتصال. عليك أن ترسمها بمفتاحك الفريد المتسق. مرة أخرى ، أود أن أقترح عدم الاحتفاظ بمعرف الاتصال. من الأفضل أن تكون عشوائيًا. إذا كان من الضروري الحفاظ على معرف conn ، فيمكنك الكتابة فوق منشئ معرف conn الافتراضي.
مرحبًا ZeroHackeR ،
شكرًا لردك ، هل هذا يعني أنه يمكننا تمرير معرف الاتصال الخاص بنا؟ ويمكننا مواصلة الدردشة بعد إعادة النشر؟ يعني بعد إعادة تخصيص كل التفاصيل للغرفة المحددة هل ستستمر الدردشة ؟؟
فيما يلي نماذج من طرق خادم الدردشة:
ج #
Public override System.Threading.Tasks.Task OnConnected ()
{
// احصل على معرف المستخدم. يفترض أن المستخدم قد تم تسجيله قبل الاتصال بالمحادثة ويتم حفظ معرف المستخدم في الجلسة.
string UserID = (سلسلة) HttpContext.Current.Session ["userid"] ؛
// Get ChatHistory and call the client function. See below
this.GetHistory(UserID);
// Get ConnID
string ConnID = Context.ConnectionId;
// Save them in DB. You got to create a DB class to handle this. (Optional)
DB.UpdateConnID(UserID, ConnID);
}
private void GetHistory(UserID)
{
// Get Chat History from DB. You got to create a DB class to handle this.
string History = DB.GetChatHistory(UserID);
// Send Chat History to Client. You got to create chatHistory handler in Client side.
Clients.Caller.chatHistory(History );
}
// This method is to be called by Client
public void Chat(string Message)
{
// Get UserID. Assumed the user is logged before connecting to chat and userid is saved in session.
string UserID = (string)HttpContext.Current.Session["userid"];
// Save Chat in DB. You got to create a DB class to handle this
DB.SaveChat(UserID, Message);
// Send Chat Message to All connected Clients. You got to create chatMessage handler in Client side.
Clients.All.chatMessage(Message);
}
""
ملاحظة: لقد كتبت هنا للتو. لم تختبر بعد.
مرحبًا ZeroHackeR ،
مرة أخرى شكرا جزيلا ، هل لديك أي مثال تقريبي؟ لا أتوقع أن أجعله يعمل بنسبة 100٪ ، أريد فقط أن يكون الغرض المرجعي.
شكرا جزيلا
هل يمكننا نقل هذا إلى StackOverflow؟ هذه ليست مشكلة في SignalR وستستفيد في SO أكثر من هنا.
niravpatel لقد كتبت 3 طرق فقط لأجلك. لماذا تطلب المزيد؟ إذا كنت لا تعرف كيفية الحفظ في DB ، فمن الأفضل أن تذهب إلى مكتبة وتجد بعض كتب C #. يجب أن تحاول أولاً بناءً عليها ، قبل أن تسأل. لننهي موضوعنا هنا.
raybooysen موافق تمامًا.
إغلاق
التعليق الأكثر فائدة
بادئ ذي بدء ، إذا كنت تبحث عن مساعدة ، فقط قل أنك تبحث عن المساعدة. أنت لا تعرف شيئًا ما ، فهذا لا يعني أن SignalR لا تدعمه أو أنها مشكلة.
النقطة الأساسية هي أنك لا تهتم بمعرف الاتصال. عليك أن ترسمها بمفتاحك الفريد المتسق. مرة أخرى ، أود أن أقترح عدم الاحتفاظ بمعرف الاتصال. من الأفضل أن تكون عشوائيًا. إذا كان من الضروري الحفاظ على معرف conn ، فيمكنك الكتابة فوق منشئ معرف conn الافتراضي.