获取SignalR的聊天记录

时间:2020-08-25 07:54:19

标签: c# asp.net signalr

我正在尝试使用SignalR获取聊天记录。我将消息存储在数据库中,因此我只是从中读取并尝试返回消息。但是,由于某种原因,执行仅在connection.invoke("GetChatMessage", i);处停止,并且不再发生任何事情。 由于the count is non zero,计数功能正常工作。 通过停止执行,我的意思是它从调试器中退出,没有错误,并且该行之后没有代码被执行。

主要JS GetChatHistory代码:

function GetChatHistory() {
    connection.invoke("GetMessageCountInDB");
    if (Count == 0)
        return;

    var i;
    for (i = 0; i < Count; i++) {
        connection.invoke("GetChatMessage", i);
        var msg = tempMessage.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;");
        var MainDiv = document.createElement("div");
        MainDiv.className = "message-row you-message"

        var userName = document.createElement("div");
        userName.className = "message-user";
        userName.innerHTML = "user"; // user
        MainDiv.appendChild(userName);

        var Message = document.createElement("div");
        Message.className = "message-text";
        Message.innerHTML = tempMessage; // message
        MainDiv.appendChild(Message);

        document.getElementById("MessageContainer").appendChild(MainDiv);
    }
}

获取消息计数功能

connection.on("RecieveMessageCountInDB", function (count) {
    Count = count;
});

C#部分: 向呼叫者发送消息:

public async Task GetChatMessage(int index)
        {
            await Clients.Caller.SendAsync(messageHistoryMessages[index]);
        }

获取邮件数:

public async Task GetMessageCountInDB()
        {
            GetPublicChatMessageHistory();

            await Clients.Caller.SendAsync("RecieveMessageCountInDB", messageHistoryMessages.Count);
        }

获取聊天记录本身:

private bool GetPublicChatMessageHistory()
        {
            var connection = new DBConnect();

            string queryString = "SELECT PublicChatMessages.Date,PublicChatMessages.Message,PublicChatMessages.SenderID,Users.Username FROM PublicChatMessages LEFT JOIN Users ON PublicChatMessages.SenderID = Users.ID";
            SqlCommand command = new SqlCommand(queryString, connection.Connection);

            SqlDataReader reader = command.ExecuteReader();

            try
            {
                while (reader.Read())
                {
                        messageHistoryUsernames.Add(reader["Username"].ToString());
                        messageHistoryMessages.Add(reader["Message"].ToString());
                        messageHistoryDateTime.Add(reader["Date"].ToString());
                }

                return true;
            }
            catch
            {
                return false;
            }
            finally
            {
                reader.Close();
                connection.Connection.Close();
            }
        }

在C#中,我定义了一些列表来存储历史记录:

List<string> messageHistoryMessages = new List<string>();
List<string> messageHistoryUsernames = new List<string>();
List<string> messageHistoryDateTime = new List<string>();

另外,我注意到一个奇怪的事情,当我调用该方法以通过索引获取聊天消息时,由于某种原因,messageHistory数组为空,但是,正在使用GetChatHistory方法向其中添加信息。

也许您知道一些更好的方法:)

0 个答案:

没有答案