2013-05-31 89 views
2

沒錯,所以我已經看到很多關於這個問題的問題,但是沒有一個建議的修復程序適用於我。信號集線器沒有找到(403)

我有一個運行在Visual Studio 2012/IIS Express中的MVC4項目,使用SignalR爲用戶做一些反饋。當我運行的項目,我在Chrome中得到一個403錯誤,如例如:

Failed to load resource: the server responded with a status of 403 (Forbidden) http://{website}/Hubs/ 


Uncaught Error: SignalR: Error loading hubs. Ensure your hubs reference is correct, e.g. <script src='/signalr/hubs'></script>. 

很顯然,我已經改變了實際的域在我的機器上{}網站

現在,我原本是一個文件夾中在我的Web項目的根目錄中有一個名爲signalr的集線器子文件夾,但後來我在SignalR GitHub上讀到了你不應該這樣做,所以我將它改爲「集線器」。仍然沒有修復它。我也看到了關於把你的RouteTable.Routes.MapHubs()的修復;按照正確的順序。我的是這樣:

protected void Application_Start() 
    { 
     AreaRegistration.RegisterAllAreas(); 

     RouteTable.Routes.MapHubs(); 

     WebApiConfig.Register(GlobalConfiguration.Configuration); 
     FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); 
     RouteConfig.RegisterRoutes(RouteTable.Routes); 
     BundleConfig.RegisterBundles(BundleTable.Bundles); 
    } 

我也看到有些人建議在您的路線作爲參數傳遞到MapHubs()方法,但這需要一個字符串和HubConfiguration對象作爲參數,這樣不工作無論是。

我的看法代碼如下所示:

@using(Html.BeginForm("Report", "Home", FormMethod.Post, new { enctype="multipart/form-data" })) 
{ 
    @Html.ValidationSummary(true); 
    <div> 
     @(InputExtensions.Hidden(Html, "submittingUserId", ViewBag.CurrentUser)) 
     @(InputExtensions.Hidden(Html, "signalConnectionId")) 
     <br /> 
     @Html.EditorFor(model => model.UploadedFile) 
     @Html.ValidationMessageFor(model => model.UploadedFile) 
    </div> 
    <div> 
     <input id="subButton" type="submit" value="UploadFile" title="Upload File" /> 
    </div> 
} 

@section Scripts { 
    @Scripts.Render("~/Scripts/jquery.signalR-1.1.1.min.js") 
    @Scripts.Render("~/Hubs") 

    <script type="text/javascript"> 
     $(document).ready(function() { 
      var accountMovementMoveHub = $.connection.accountMovementHub; 
      $("#signalConnectionId").val($.connection.connectionId); 

      $.connection.hub.updateProgress = function (message) { 
       $("#progress-list").append('<li>' + message + '</li>'); 

      }; 

      $.connection.hub.start(); 
     }); 
    </script> 

} 

我還添加這些元素到Web.config:

<system.webServer> 
    <validation validateIntegratedModeConfiguration="false" /> 
    <modules runAllManagedModulesForAllRequests="true"> 
    </modules> 
</system.webServer> 

它是推動我絕對瘋了,我已經試過絕對每一個建議,我可以找到在這裏,github,以及其他任何事情:(

任何幫助將不勝感激!

感謝

ANSWER

因此,原來,我以爲腳本參考/ signalr /集線器是包含集線器的物理文件夾。它不是;它是對虛擬目錄的引用,這就是爲什麼如果你還有一個名爲SignalR的物理文件夾,它會變得困惑。我將我的集線器文件夾移到了我的業務項目中,並將腳本參考設置回「/ signalr/hubs」,並開始工作。

對不起,這個愚蠢的問題,並感謝您的答案。

+0

看起來像你有一個尾部斜槓? http:// {website}/Hubs/ – Steve

+0

我認爲這只是Chrome的控制檯添加最後一個斜槓。錯誤來自視圖中的腳本引用,它引用了「〜/集線器」 – JustinMoser

+0

您是否查看了源代碼並進行了確認?只是一個想法。 – Steve

回答

3

RouteTable.Routes.MapHubs();將您的集線器映射到http:// {網站} /信號器/集線器

您爲什麼試圖從http:// {website}/Hubs獲取集線器? 只需從瀏覽器訪問這兩個路徑,就需要獲取包含大量javascript代碼的http響應。如果這不起作用,那麼這意味着您的應用程序沒有正確配置。

按照這個tutorial,你可以看到RouteTable.Routes的順序。MapHubs()比你的有

0

繼靈感不同上面我更新了我的webconfig看起來像這樣:

SCRIPT SRC =」 <%:ResolveClientUrl( 「〜/ signalr /中心」)% > '

代替

SCRIPT SRC =' <%:ResolveClientUrl( 「〜/集線器」)%>」類型= 「文本/ JavaScript的」

不知道爲什麼,因爲文件夾結構只是〜/ Hubs相對於頁面,但它的工作原理如此...... ZANG !!!!

相關問題