Kon*_*obi 30 asp.net-mvc jquery controller signalr owin
我尝试在MVC应用程序中使用SignalR.它工作正常,但我在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
Run Code Online (Sandbox Code Playgroud)
有趣的是,我通过Hub从Controller调用的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();
});
Run Code Online (Sandbox Code Playgroud)
控制器:
var hubContext = GlobalHost.ConnectionManager.GetHubContext<ImporterHub>();
hubContext.Clients.All.sendMessage("All operations complete");
Run Code Online (Sandbox Code Playgroud)
我使用.Net v4.5.1,SignalR v2.1.2.0和IIS 8.5与Windows身份验证.
我该如何解决这个错误?
hal*_*r73 43
您似乎遇到了Chrome问题.问题是Chrome无法正确处理WebSockets的Windows身份验证.
以下是几年前提交的初始问题,报告称Chrome不支持任何形式的HTTP身份验证:
https://code.google.com/p/chromium/issues/detail?id=123862
该问题已针对基本和摘要式身份验证解决,但不适用于Windows(NTLM/Negotiate)身份验证.在不到一个月前创建了一个问题,用于跟踪Chrome支持使用WebSockets进行Windows身份验证的进度:
https://code.google.com/p/chromium/issues/detail?id=423609
显然,Windows身份验证的问题在Chrome开发人员频道中已部分修复,但前提是客户端在建立WebSocket之前已经过服务器身份验证.
您仍然可以sendMessage
从Controller 调用的原因是,当WebSocket连接失败时,SignalR会自动回退到使用除WebSockets之外的传输(即服务器发送的事件或长轮询).Chrome将使用SignalR的其他传输正确处理Windows身份验证.
我建议不要改变任何东西.看起来Chrome最终将支持WebSockets的Windows身份验证.
除了Chrome控制台中的错误之外,唯一真正的问题是在Chrome中建立SignalR连接可能需要稍长的时间.如果这是一个大问题,您始终可以指定客户端应尝试使用的传输.所以在Chrome,你只能试着serverSentEvents
和longPolling
,但后来当Chrome浏览器不解决这个问题,你会不会用最好的交通,直到你改变你的代码.
归档时间: |
|
查看次数: |
15428 次 |
最近记录: |