Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 行动不';在负载均衡器、SSE或任何其他方法上使用WebSocket时,不要在signalr hub上被解雇_C#_Asp.net Mvc_Websocket_Signalr_Signalr Backplane - Fatal编程技术网

C# 行动不';在负载均衡器、SSE或任何其他方法上使用WebSocket时,不要在signalr hub上被解雇

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();)调用集线器操作时;,在本例中

我使用signalr 2.4.0版为聊天功能设置了signalr hub。使用SQL背板并以标准方式进行设置,因为站点跨两台服务器,使用Rackspace的云负载平衡器

使用服务器发送的事件没有问题,消息通过负载平衡器发送,没有问题。使用WebSocket时,通常会调用onConnected和onDisconnected并建立连接。我已在浏览器上启用signalr日志记录,并且看不到任何错误或问题。但是,当从浏览器(即hub.server.sendaction();)调用集线器操作时;,在本例中,发送消息(尽管它适用于除连接或断开连接以外的任何正在触发的操作)根本不会发生任何事情。该操作不会被触发,似乎在任何地方都没有错误

从等式中去掉负载平衡器似乎可以解决问题,调用操作并将消息发送给其他用户

有人能推测这里的问题是什么吗?我已经启用了我可能遇到的各种形式的日志记录,但我看不到任何错误或问题。根据信号器日志记录,正常建立websocket连接。我可以在日志中看到正在正确调用中心操作。显然负载平衡器必须以某种方式参与进来,但鉴于SSE没有问题,也没有错误,我不知道为什么没有调用该操作

编辑-根据请求,这是中心,操作的内容不包括在内,因为操作根本不触发。有一种未连接和未连接的方法,两种方法都会正常点火:

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讨论了这个问题