2016-05-17 38 views
0

我已經使用SignalR和ASP.NET MVC應用程序創建了一個聊天箱,所有發送的消息都存儲在Azure存儲服務中表。對於RowKeyPartitionKey我相當於DateTime.Now.Ticks.ToString()通過SignalR在客戶端和服務器之間發送和接收日期時間記號在傳輸後給出不同的值

爲了將條目保存到表中,我也沒有問題刪除條目 沒有 問題。但是,沒有問題不是100%真實的。

爲了移除消息(無需刷新頁面),我還將滴答發送回客戶端並將其存儲在data-key屬性中。如果用戶按下刪除按鈕,那麼該屬性的值將發送回服務器。

現在我得到的問題是,服務器收到的刪除該消息的滴答不同於Azure表中的滴答。在這裏你有我的代碼在樞紐。

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); 
} 

這裏是班上ChatMessage代碼:我已經看到了,我已經收到6359910852785825 在服務器上

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; 
    } 
} 

了代碼調試後,但在表中PartitionKey是6359910852785825 。所以你可以看到鑰匙是不同的,我有例外。


對這裏好奇的人,你已經在我的jQuery代碼:

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>&nbsp;' + message + '</p><p>&nbsp;<span class="glyphicon glyphicon-pencil"></span>&nbsp;<span class="glyphicon glyphicon-trash"></span>&nbsp;<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")); 
    }); 
} 

回答

0

我找到了!我現在將長整型值作爲字符串發送給客戶端。我在客戶端收到的值現在等於服務器發送的值。

相關問題