Ich habe eine Chatbox mit SignalR und eine ASP.NET MVC-Anwendung, alle Nachrichten, die gesendet werden, sind in einem Azure-Speicherdienst gespeichert Tabelle. Für die RowKey
und die PartitionKey
Ich werde das ist gleich DateTime.Now.Ticks.ToString()
.Senden und Empfangen von Datum Ticks zwischen Client und Server von SignalR gibt anderen Wert nach der Übertragung
Zum Speichern der Einträge in der Tabelle, habe ich kein Problem auch einen Eintrag zu löschen Ich habe
keine
Problem. Jedoch ist kein Problem nicht 100% wahr.
Für eine Nachricht (ohne die Seite zu aktualisieren), schicke ich auch die Zecken zurück an den Client und speichere, dass in dem data-key
-Attribut entfernen. Wenn der Benutzer die Löschschaltfläche gedrückt hat, sende ich den Wert dieses Attributs zurück an den Server.
Das Problem, das ich jetzt habe, ist, dass das Häkchen, das der Server zum Entfernen dieser Nachricht erhalten hat, anders ist als die Häkchen in der Azure-Tabelle. Hier hast du meinen Code im Hub. Hier
public void Send(string name, string message)
{
long key = DateTime.Now.Ticks; // → key is equal to 635991085278582583
Clients.All.BroadcastMessage(key, name, message);
_chatService.AddMessage(new ChatMessage(key, name, message));
}
public void Remove(string key)
{
_chatService.RemoveMessage(key); // → key is equal to 635991085278582500
Clients.All.BroadcastRemoved(key);
}
ist der Code in der Klasse ChatMessage:
public class ChatMessage : TableEntity
{
public string UserName { get; set; }
public string Message { get; set; }
public ChatMessage()
{
}
public ChatMessage(string partitionKey, string rowKey) : base(partitionKey, rowKey)
{
}
public ChatMessage(long key, string name, string message)
{
PartitionKey = key.ToString();
RowKey = key.ToString();
UserName = name;
Message = message;
}
}
Nach meinem Code Debuggen Ich habe gesehen, dass ich erhalten habe 6359910852785825 auf dem Server aber die PartitionKey
in der Tabelle 6359910852785825 . Sie können also sehen, dass die Tasten unterschiedlich sind und ich die Ausnahme habe.
Für Neugierige hier Sie haben mein JQuery-Code:
var chat = $.connection.chatHub;
chat.client.BroadcastMessage = function (key, name, message) {
message = encode(message);
name = encode(name);
var discussionpane = $("#discussion").eq(0);
discussionpane.append('<div class="message" data-key="' + key + '"><p><b>' + name + ':</b> ' + message + '</p><p> <span class="glyphicon glyphicon-pencil"></span> <span class="glyphicon glyphicon-trash"></span> <span class="glyphicon glyphicon-retweet"></span></p></div>');
initEvents();
};
chat.client.BroadcastRemoved = function (key) {
$('.message[data-key=' + key + ']').addClass("removed");
$('.message[data-key=' + key + '] p').html("");
initEvents();
};
$('#message').focus();
$.connection.hub.start().done(function() {
$('#sendmessage').click(function() {
var text = $('#message').val();
if (text != "") {
chat.server.send("@(User.Identity.GetUserName())", text);
$('#message').val('').focus();
}
});
initEvents();
});
function initEvents() {
$(".message .glyphicon-trash").click(function() {
var parent = $(this).parent().parent();
parent.addClass("removed");
chat.server.remove(parent.data("key"));
});
}