Jquery 信号器MVC 5 Websocket无有效凭据

Jquery 信号器MVC 5 Websocket无有效凭据,jquery,asp.net-mvc,controller,signalr,owin,Jquery,Asp.net Mvc,Controller,Signalr,Owin,我尝试在MVC应用程序中使用信号器。它工作得很好,但我在Chrome控制台中遇到以下错误 WebSocket connection to 'ws://localhost:18245/signalr/connect?transport=webSockets&clientProtocol=1.4&connectionToken=bNDGLnbSQThqY%2FSjo1bt 8%2FL45Xs22BDs2VcY8O7HIkJdDaUJ4ftIc54av%2BELjr27ekHUiTY

我尝试在MVC应用程序中使用信号器。它工作得很好,但我在Chrome控制台中遇到以下错误

 WebSocket connection to 'ws://localhost:18245/signalr/connect?transport=webSockets&clientProtocol=1.4&connectionToken=bNDGLnbSQThqY%2FSjo1bt
8%2FL45Xs22BDs2VcY8O7HIkJdDaUJ4ftIc54av%2BELjr27ekHUiTYWgFMfG6o7RaZwhf
fpXavzWQ1jvkaxGm5rI%2BWtK7j0g1eQC2aOYP366WmRQLXCiYJfsm4EbwX6T8n2Aw
%3D%3D&connectionData=%5B%7B%22name%22%3A%22importerhub%
22%7D%5D&tid=9' failed: HTTP Authentication failed; no valid credentials available 
有趣的是,我通过集线器从控制器调用的jquery方法工作得很好

jQuery:

 $(function () {
            // Initialize the connection to the server
            var importerHub = $.connection.importerHub;

            // Preparing a client side function
            // called sendMessage that will be called from the server side
            importerHub.client.sendMessage = function (message) {
                showOrUpdateSuccessMessage(message);
            };
            $.connection.hub.start();
        });
控制器:

var hubContext = GlobalHost.ConnectionManager.GetHubContext<ImporterHub>();
            hubContext.Clients.All.sendMessage("All operations complete");
var-hubContext=GlobalHost.ConnectionManager.GetHubContext();
hubContext.Clients.All.sendMessage(“所有操作完成”);
我在Windows身份验证中使用.Net v4.5.1、SignalR v2.1.2.0和IIS 8.5


如何修复此错误?

看起来您遇到了Chrome问题。问题是Chrome无法正确处理WebSocket的Windows身份验证

以下是几年前提交的最初一期报告,报告称Chrome不支持任何形式的HTTP身份验证:

对于基本身份验证和摘要身份验证,该问题已得到解决,但对于Windows(NTLM/协商)身份验证,则未得到解决。不到一个月前,出现了一个问题,用于跟踪Chrome支持WebSocket进行Windows身份验证的进度:

显然,Windows身份验证的问题在Chrome-dev频道中得到了部分修复,但前提是客户端在建立WebSocket之前已经与服务器进行了身份验证

您仍然可以从控制器调用
sendMessage
的原因是,当WebSocket连接失败时,Signal会自动退回到使用WebSocket以外的传输(即服务器发送的事件或长轮询)。Chrome将通过Signal的其他传输正确处理Windows身份验证

我建议不要改变任何事情。看起来Chrome最终将支持WebSocket的Windows身份验证


除了chrome控制台中的错误之外,唯一真正的问题是,在chrome中建立信号机连接可能需要稍长的时间。如果这是一个大问题,你可以随时。因此,在Chrome上,您只能尝试
serverSentEvents
longPolling
,但是当Chrome解决了这个问题时,在您更改代码之前,您将无法使用尽可能好的传输。

这个错误似乎是存在的,但看起来他们正在处理它。 您可以使用
https
/
wss
解决此问题


阅读。

我设法通过切换到Chrome的开发频道来解决这个问题:下载自。 安装后,我需要在中启用dev标志chrome://flags/. 搜索“启用WebSocket连接重用以进行身份验证”并启用该功能。
您需要使用69版或更高版本

以下是我解决问题的方法,对我来说,这与Chrome无关。我使用的是chrome,它可以处理实时数据。我的错误是春季安全

.antMatchers("/ws/myapp", "/http/myaap", "/topic/**", "/app/**" ).permitAll()

谢谢,传输选项
serverSentEvents
longPolling
会消除此错误。只需使用Microsoft Edge(新的Internet Explorer)和worked@FindOut_Quran是的,这是Chrome中的一个问题。它应该在其他浏览器中正常工作。但是,我们并不总是能够控制其他人使用什么浏览器来查看。还要注意,这可能会导致Chrome在尝试重新连接时“忘记”您的凭据并询问您的登录信息。是否仍然存在解决此问题的方法?看起来这个chrome bug从2014年10月就已经存在了,请在你的帖子中粘贴链接问题的相关部分,以防链接消失。