我正在尝试使用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, "&").replace(/</g, "<").replace(/>/g, ">");
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方法向其中添加信息。
也许您知道一些更好的方法:)