2014-11-11 2 views
26

MVC 응용 프로그램에서 SignalR을 사용하려고합니다. 그것은 잘 작동하지만 난 크롬 콘솔SignalR MVC 5 Websocket 유효하지 않은 자격증 명

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(); 
     }); 

컨트롤러 : 나는 닷넷 v4.5.1, SignalR의 v2.1.2.0를 사용하여 Windows 인증과 8.5을 IIS

var hubContext = GlobalHost.ConnectionManager.GetHubContext<ImporterHub>(); 
      hubContext.Clients.All.sendMessage("All operations complete"); 

.

어떻게이 오류를 해결할 수 있습니까?

답변

38

Chrome 문제가있는 것 같습니다. 문제는 Chrome이 WebSocket 용 Windows 인증을 제대로 처리하지 못한다는 것입니다. Windows 용

https://code.google.com/p/chromium/issues/detail?id=123862

그 문제는 기본 및 다이제스트 인증에 해결되었습니다 있지만 : 아래

초기 문제가 크롬 HTTP 인증의 어떤 형태를 지원하지 않았 음을보고 몇 년 전 제출 (NTLM/협상) 인증.

https://code.google.com/p/chromium/issues/detail?id=423609

분명히, Windows 인증에 문제가 부분적으로 크롬 dev에 채널에 고정되어 있지만 경우에만, : WebSocket을 사용하여 Windows 인증을위한 크롬 지원에 대한 진행 상황을 추적 한 달 전에 비해 적게 생성 중에 문제가 발생했습니다 클라이언트는 WebSocket을 설정하기 전에 서버로 이미 인증되었습니다.

컨트롤러에서 sendMessage (으)로 계속 호출 할 수있는 이유는 SignalS가 WebSocket 연결에 실패하면 자동으로 WebSocket (서버 전송 이벤트 또는 긴 폴링) 이외의 전송을 사용하기 때문입니다. Chrome은 SignalR의 다른 전송으로 Windows 인증을 적절하게 처리합니다.

아무 것도 변경하지 않는 것이 좋습니다. Chrome은 결국 WebSocket에 대한 Windows 인증을 지원합니다.

Chrome 콘솔의 오류 이외에 유일한 실제 문제는 Chrome에서 SignalR 연결을 설정하는 데 약간 시간이 걸릴 수 있다는 것입니다. 그게 큰 문제라면, 항상 specify what transports the client should attempt using 일 수 있습니다. 따라서 Chrome에서는 serverSentEventslongPolling 만 시도 할 수 있지만 Chrome 으로 문제를 해결할 때 코드를 변경하기 전에는 가능한 최상의 전송을 사용하지 않습니다.

+2

감사합니다. 오류는 전송 옵션'serverSentEvents'와'longPolling'으로 사라집니다. – Konobi

+0

간단히 Microsoft Edge (새 Internet Explorer)를 사용하여 작동했습니다. –

+2

@FindOut_Quran 예, Chrome의 문제입니다. 그것은 다른 브라우저에서 올바르게 작동해야합니다. 그러나 우리는 항상 다른 사람들이 그것을보기 위해 어떤 브라우저를 사용 하는지를 제어 할 수있는 사치를 지니지는 않습니다. –

관련 문제