C# 行动不';在负载均衡器、SSE或任何其他方法上使用WebSocket时,不要在signalr hub上被解雇
我使用signalr 2.4.0版为聊天功能设置了signalr hub。使用SQL背板并以标准方式进行设置,因为站点跨两台服务器,使用Rackspace的云负载平衡器 使用服务器发送的事件没有问题,消息通过负载平衡器发送,没有问题。使用WebSocket时,通常会调用onConnected和onDisconnected并建立连接。我已在浏览器上启用signalr日志记录,并且看不到任何错误或问题。但是,当从浏览器(即hub.server.sendaction();)调用集线器操作时;,在本例中,发送消息(尽管它适用于除连接或断开连接以外的任何正在触发的操作)根本不会发生任何事情。该操作不会被触发,似乎在任何地方都没有错误 从等式中去掉负载平衡器似乎可以解决问题,调用操作并将消息发送给其他用户 有人能推测这里的问题是什么吗?我已经启用了我可能遇到的各种形式的日志记录,但我看不到任何错误或问题。根据信号器日志记录,正常建立websocket连接。我可以在日志中看到正在正确调用中心操作。显然负载平衡器必须以某种方式参与进来,但鉴于SSE没有问题,也没有错误,我不知道为什么没有调用该操作 编辑-根据请求,这是中心,操作的内容不包括在内,因为操作根本不触发。有一种未连接和未连接的方法,两种方法都会正常点火:C# 行动不';在负载均衡器、SSE或任何其他方法上使用WebSocket时,不要在signalr hub上被解雇,c#,asp.net-mvc,websocket,signalr,signalr-backplane,C#,Asp.net Mvc,Websocket,Signalr,Signalr Backplane,我使用signalr 2.4.0版为聊天功能设置了signalr hub。使用SQL背板并以标准方式进行设置,因为站点跨两台服务器,使用Rackspace的云负载平衡器 使用服务器发送的事件没有问题,消息通过负载平衡器发送,没有问题。使用WebSocket时,通常会调用onConnected和onDisconnected并建立连接。我已在浏览器上启用signalr日志记录,并且看不到任何错误或问题。但是,当从浏览器(即hub.server.sendaction();)调用集线器操作时;,在本例中
namespace SignalRChat
{
public class NotificationHub : Hub
{
private ApplicationDbContext db = new ApplicationDbContext();
public void Send(int ChatID, string UserID, string message, string
name, string profileImage)
{
//Stuff happens here but it is not being fired at all
}
}
}
第页的相关javascript:
$(function () {
var note = $.connection.notificationHub;
$.connection.hub.logging = true;
$.connection.hub.start().done(function () {
$(document).on("click", "#sendmessage", function () {
note.server.send('@Model.ChatID', '@Model.UserID', $('#message').val(), '@Model.Name', '@Model.ProfileImage');
msgArea.scrollTop = msgArea.scrollHeight;
$('#message').val('').focus();
});
$.connection.hub.qs = { 'name': '@Model.Name', 'UserID': '@Model.UserID', 'connectionGroup': '@Model.ChatID' + '_hub', 'cohortName': '@Model.Cohortname', 'outlog': 'in' };
});
您能否(尽可能简洁地)提供javascript代码和中心以及您正在调用的操作?您好,我已经在页面的中心和javascript代码中添加了相关操作。请记住,根据信号器日志记录,正在调用发送操作。我没有包括onConnected和onDisconnected,因为它们都可以正常工作。不过,在集线器中,发送操作显示在这些操作之前。页面上有更多与集线器相关的javascript,但也不是真正相关的。需要强调的是,在本地使用websockets可以很好地实现这一点,并且在不使用负载平衡器的情况下也可以使用。在负载平衡器上使用SSE或ForeverFrame也不会出现任何问题。您正在建立连接,但没有响应消息。可能有很多问题1)请求中的查询不正确2)服务器未返回任何消息3)连接正在关闭4)返回响应,但代码未获得响应。使用诸如wireshark或fiddler之类的嗅探器,检查发生了哪些故障。您的负载平衡器工作情况如何?如果未将其设置为粘滞,并且您无法确保同一集线器获得响应,则无法保持连接。我在五月份与MS Build的daniel roth讨论了这个问题