Hola David,
Hice una aplicación de chat usando signalR al igual que el chat de Facebook. Ahora quiero conservar los datos de la conversación de chat en la base de datos y quiero mostrar ese historial para su sala de chat correspondiente. ¿Puede guiarme sobre cómo archivar eso? ¿SignalR admite la comunicación con el servidor SQL?
También, ¿puede orientarme sobre cómo puedo mantener la ID de conexión para poder reiniciar el chat después de la devolución de datos como una aplicación de chat de Facebook?
En primer lugar, si está buscando ayuda, diga que está buscando ayuda. No sabe algo, no significa que SignalR no lo admita o sea un problema.
El punto clave es que no te importa el id de conexión. Tienes que mapearlo con tu propia clave única consistente. Una vez más, sugeriría no mantener la conn id. Es mejor que sea aleatorio. Si es imprescindible mantener el ID de conexión, puede sobrescribir el generador de ID de conexión predeterminado.
Hola ZeroHackeR,
Gracias por su respuesta. ¿Significa que podemos pasar nuestra propia identificación de conexión? y podemos continuar nuestro chat después de la publicación? Quiero decir, después de reasignar todos los detalles a la sala específica, ¿continuará el chat?
Estos son los métodos de muestra del servidor de chat:
`` C #
anulación pública System.Threading.Tasks.Task OnConnected ()
{
// Obtener UserID. Se supone que el usuario está registrado antes de conectarse al chat y el ID de usuario se guarda en la sesión.
cadena UserID = (cadena) 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);
}
''
NOTA: acabo de escribir aquí. Aún no probado.
Hola ZeroHackeR,
Nuevamente muchas gracias, ¿tiene algún ejemplo aproximado? No espero que funcione al 100%, solo quiero para el propósito de referencia.
Muchas gracias
¿Podemos llevar esto a StackOverflow? Esto no es un problema en SignalR y se beneficiaría más en SO que aquí.
@niravpatel Escribí 3 métodos solo para ti. ¿Por qué pedir más? Si no sabe cómo guardar en la base de datos, es mejor que vaya a una biblioteca y busque algunos libros de C #. Debería probar primero basándose en ellos, antes de preguntar. Terminemos nuestro tema aquí.
@raybooysen Totalmente de acuerdo.
Clausura
Comentario más útil
En primer lugar, si está buscando ayuda, diga que está buscando ayuda. No sabe algo, no significa que SignalR no lo admita o sea un problema.
El punto clave es que no te importa el id de conexión. Tienes que mapearlo con tu propia clave única consistente. Una vez más, sugeriría no mantener la conn id. Es mejor que sea aleatorio. Si es imprescindible mantener el ID de conexión, puede sobrescribir el generador de ID de conexión predeterminado.