SignalR MVC 5 Websocket pas d'informations d'Identification valides
j'essaie d'utiliser SignalR en Application MVC. Il fonctionne bien, mais j'obtiens l'Erreur suivante dans la console Chromée
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
Le plus drôle, c'est que la méthode jquery que je peux appeler le Contrôleur sur le Hub fonctionne bien.
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();
});
Contrôleur:
var hubContext = GlobalHost.ConnectionManager.GetHubContext<ImporterHub>();
hubContext.Clients.All.sendMessage("All operations complete");
Que j'utilise .Net v4.5.1, SignalR v2.1.2.0 et IIS 8.5 avec l'Authentification Windows.
Comment puis-je corriger cette erreur?
Vous devez vous connecter pour publier un commentaire.
On dirait que vous êtes en cours d'exécution dans un Chrome question. Le problème, c'est que Chrome ne gère pas correctement l'Authentification Windows pour les WebSockets.
Ci-dessous est la première question soumise il y a quelques années les rapports que Chrome n'a pas l'appui de toute forme d'authentification HTTP:
https://code.google.com/p/chromium/issues/detail?id=123862
Que le problème a été résolu pour de Base et de l'authentification Digest, mais pas pour Windows (NTLM/Négocier) d'authentification. Il y avait un problème créé moins d'un mois pour suivre les progrès sur Chrome support pour l'authentification Windows avec les WebSockets:
https://code.google.com/p/chromium/issues/detail?id=423609
Apparemment, le problème avec l'authentification Windows est partiellement résolu dans le Chrome dev de canaux, mais seulement si le client a déjà authentifié par le serveur avant l'établissement d'une WebSocket.
La raison, vous pouvez toujours appeler
sendMessage
à partir de votre Contrôleur est parce que SignalR tombe automatiquement en arrière à l'aide d'un transport autres que les WebSockets (c'est à dire le serveur a envoyé des événements ou des long-polling), lors de la connexion WebSocket échoue. Chrome gérer correctement l'authentification Windows avec SignalR est autres transports.Je suggère de ne pas changer quoi que ce soit. Il ressemble à Chrome éventuellement prendre en charge l'authentification Windows pour les WebSockets.
Le seul vrai problème, autre que l'erreur dans votre chrome console, c'est que cela pourrait prendre un peu plus de temps pour établir un SignalR de connexion dans google Chrome. Si c'est un gros problème, vous pouvez toujours spécifiez ce que transporte le client tente de l'aide. Donc, sur Chrome, vous ne pouviez essayer
serverSentEvents
etlongPolling
, mais alors quand Chrome ne résoudre le problème, vous n'allez pas l'utiliser le mieux possible le transport jusqu'à la modification de votre code.serverSentEvents
etlongPolling
.Le bug semble être en vie, mais on dirait qu'ils travaillent sur elle.
Vous pouvez résoudre le problème en utilisant
https
/wss
.Lire codeMonkeys réponse à SignalR ne fonctionne pas avec Windows-authentification intégrée.
J'ai réussi à résoudre ce problème en changeant le Canal Dev de Chrome : Télécharger à partir de ici.
Une fois Installé j'avais besoin pour permettre à un dev drapeau dans chrome://flags/.
Recherche pour Activer la connexion WebSocket la réutilisation à des fins d'authentification et d'activer la fonctionnalité.
Vous devez être sur la version de 69 ans ou plus