2013-03-02 73 views
2

試圖從另一個域調用signalR,並不斷收到此錯誤:SignalR:有沒有被允許的誤差訪問控制允許來源

XMLHttpRequest cannot load localhost:62150/signalr/negotiate?_=1362242757692. Origin localhost:4982 is not allowed by Access-Control-Allow-Origin.

這是我想要的代碼運行:

$(function() { 
    jQuery.support.cors = true; 
    $.connection.hub.url = 'http://localhost:62150/signalr'; 
    $.connection.hub.start() 
     .done(function() { alert("Now connected!"); }) 
     .fail(function() { alert("Could not Connect!"); }); 
}); 

jQuery和jquery.signalr.js加載中爲localhost:62150/signalr /集線器與JS響應爲localhost:62150/signalr /集線器/談判_ = 1362243021215返回JSON我辦這個嗎?瀏覽器 - 所以它不是缺少腳本或無效路徑問題。

我已經試過什麼:

以上所有的組合。

任何人有任何想法我可以嘗試什麼?

服務應用程序是MVC和WebAPI的組合(不要認爲它有任何區別)。 如果我嘗試從同一個域的代碼 - 它的工作。

+0

?它支持CORS嗎? – 2013-03-02 17:05:18

+0

Chrome。我可以通過ajax跨Web調用Web Api,所以是的。 – Evgeni 2013-03-02 18:17:48

回答

5

如果您使用的是1.0或更高版本,您是否在服務器上啓用了跨域? (它在默認情況下現已停用)

RouteTable.Routes.MapHubs(new HubConfiguration { EnableCrossDomain = true }); 
+5

以前的版本是預發行版本,SignalR 1.0是第一個RTM版本,所以這不是一個突破性更改;-) – 2013-03-02 19:43:18

+1

FWIW這個更改在發佈說明中的「1.0重大更改」中被突出提及。 https://github.com/SignalR/SignalR/blob/master/ReleaseNotes.md是查找每個版本中更改的最佳位置。 – halter73 2013-03-03 08:17:03

+2

我得到了上面的錯誤,即使我有這行代碼。如果我使用RouteTable.Routes.MapHubs()代替,我將得到304.我的代碼使用IE10和FF 20,但不使用Chrome 25.0.1364.172。任何想法? – Adamy 2013-03-15 05:02:19

3

浪費了幾個小時,我覺得這是很好的分享我的經驗後:

  1. DO訪問控制允許來源不添加到您的web.config(是的,它從來沒有添加它,但嘗試的時候,這是字面上我做的第一次,並在一個簡單的jQuery跨域訪問測試後留在那裏)

  2. RouteTable.Routes.MapHubs(new HubConfiguration() { EnableCrossDomain = true });工作得很好,集線器

  3. RouteTable.Routes.MapConnection<MyConnection>("foo", "/foo", new ConnectionConfiguration { EnableCrossDomain = true });這工作得很好太爲你使用的是什麼瀏覽器中測試這個類繼承PersistentConnection