2014-11-11 10 views
26

MVC Uygulamasında SignalR kullanmayı denerim. Bu iyi çalışıyor ama Krom konsolunaSinyalR MVC 5 WebChrome geçerli değil Kimlik Bilgileri

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 

komik bir şey i Hub üzerinde Denetleyicisi'nden çağrı jQuery yöntemi çalışıyor olmasıdır aşağıdaki hata olsun.

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

Denetleyici: Ben .Net v4.5.1, SignalR v2.1.2.0 kullanmak ve Windows Authentication ile 8.5 IIS

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

.

Bu hatayı nasıl düzeltebilirim?

cevap

38

Bir Chrome sorununa çalıştığınız anlaşılıyor. Sorun, Chrome'un Web Sockets için Windows Kimlik Doğrulaması'nı doğru şekilde işlememesidir. Windows için

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

Yani mesele Temel ve Özet kimlik doğrulaması için çözüldüğünü, ancak Aşağıda

ilk sorun Chrome HTTP ispat yöntemi desteklemediği yönünde haberler bir kaç yıl önce gönderilen olduğunu (NTLM/Anlaşma) kimlik doğrulaması.

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

Görünüşe göre, Windows kimlik doğrulaması ile sorun kısmen Krom dev kanalında sabitlenmiştir ancak eğer: WebSockets Windows kimlik doğrulaması için Chrome desteğine gelişmesini takip etmek için bir ay öncesine göre daha az oluşturulan bir sorun oluştu İstemci bir WebSocket oluşturmadan önce sunucuyla zaten doğrulanmış.

Denetleyicinizden hala sendMessage numaralı telefonu arayabilmenizin nedeni, WebSocket bağlantısı başarısız olduğunda, SignalR otomatik olarak WebSockets (yani sunucuyla gönderilen olaylar veya uzun sorgulama) dışındaki bir aktarım kullanmaya geri düştüğü içindir. Chrome, Windows kimlik doğrulamasını SignalR'ın diğer aktarımlarıyla gerektiği gibi ele alacaktır.

Hiçbir şeyi değiştirmenizi öneriyorum. Chrome, WebSockets için Windows kimlik doğrulamasını destekleyecek gibi görünüyor.

Krom konsolunuzdaki hata dışındaki tek sorun, Chrome'da bir SignalR bağlantısı kurmak biraz zaman alabilir. Bu büyük bir sorunsa, her zaman specify what transports the client should attempt using. Chrome'da, serverSentEvents ve longPolling'u deneyebilirsiniz, ancak Chrome sorunu düzeltirse, kodunuzu değiştirene kadar mümkün olan en iyi aktarımı kullanmayacaksınız.

+2

Teşekkür ederim, hata "serverSentEvents" ve "longPolling" taşıma seçenekleri ile başarısız. – Konobi

+0

Sadece Microsoft Edge (yeni Internet Explorer) kullanıldı ve –

+2

@ FindOut_Quran çalıştı, bu Chrome'da bir sorun. Diğer tarayıcılarda düzgün çalışmalıdır. Ancak, başkalarının görüntüleyebilmek için kullandığı tarayıcıyı her zaman kontrol etme lüksüne sahip olamayız. –