2012-06-22 132 views
29

我想在IIS上部署一個SignalR站點。代碼在VS中可以正常工作。但得到404沒有發現錯誤試圖解決信號/集線器到目前爲止我已經嘗試過。SignalR/signalr /集線器404沒有找到

1)改變腳本裁判:

script src="<%= ResolveUrl("~/signalr/hubs") %>" type="text/javascript"></script> 

2)修改web.config中包括:

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

3)改變上IIS的invoke請求UrlMappingsModule

4)增加了SignalR.Hosting.AspNet.dll看看是否會有所幫助。

不知道還有什麼其他的嘗試或檢查,任何幫助或指向正確的方向嗎?

回答

6

嘗試增加通配符應用程序映射到你的服務器,以幫助映射腳本中的URL未知的擴展名「〜/ signalr /集線器」

+1

啊是的!這工作得很好,謝謝! –

+1

它也適用於我!非常感謝Chridam。我的問題是服務器正在尋找以下「localhost/signalr/hubs」(使用Chrome開發者控制檯確定)。實際上,這個url是動態的,所以這不會獲得所需的js文件。 –

0

我沒有問題,在MVC3路由,但沒有得到的路徑是錯誤的。我建議你看一下源代碼並查看腳本實際指向的位置,確保它正在解析應用程序目錄。並確保您可以用瀏覽器正確打開文件。例如。

<script src="/MyWebApp/signalr/hubs" type="text/javascript"></script> 

你能從瀏覽器打開文件(用正確的子目錄替換它)嗎?

如果沒有,集線器可能沒有設置正確,它可能會指向正確的方向。小提琴吧。

我使用的語法是:

<script src="@Url.Content("~/signalr/hubs")" type="text/javascript"></script> 

這可能是Url.Content and ResolveUrl

29

途徑註冊的順序很重要的區別。我有這個確切的問題,並確保我的global.asax.cs固定它看起來像這樣:

public class MvcApplication : System.Web.HttpApplication 
{ 
    protected void Application_Start() 
    { 
     AreaRegistration.RegisterAllAreas(); 
     RouteTable.Routes.MapHubs(); 

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

這是在使用SignalR,MVC和的WebAPI一起網站。

+2

更多信息在「404未找到錯誤」標題下:http://www.asp.net/signalr/overview/troubleshooting-and-debugging/troubleshooting – cbp

+1

此外 - 信號發生器2.0中不再需要映射集線器(和實際上會產生一個錯誤):http://www.asp.net/signalr/overview/signalr-20/getting-started-with-signalr-20/upgrading-signalr-1x-projects-to-20 – John

+0

我不敢相信這個!!!謝謝。 – reckface

1

確保您的網站的AppPool以.NET Framework的正確版本爲目標。

+0

這解決了它對我來說。 – Gigi

0

我在IIS版本中遇到了類似的問題,我通過重新啓動AppPool,重新啓動web及其工作來修復它。

6

如果你在的WebForms工作,請執行以下步驟

  1. 在webconfig:

    <validation validateIntegratedModeConfiguration="false" /> 
    <modules runAllManagedModulesForAllRequests="true"/> 
    
  2. 在頁面中心添加引用作爲

    <script src="/signalr/signalr/hubs"></script> 
    

    inst的

    <script src="/signalr/hubs"></script> 
    
+1

對我有用 – shalke

+0

你知道如何去除第二個/ signalr嗎? – nZeus

1

EAD我可能有點晚,但希望它可以幫助別人。 確保此代碼在開始時運行。

Sub Application_Start(ByVal sender As Object, ByVal e As EventArgs) 
    RouteTable.Routes.MapHubs() 
End Sub 

因爲我加了一個Global.asax我的應用程序,然後代碼隱藏,但是把這個在Global.asax文件

<%@ Application Language="VB" CodeBehind = "Global.asax.vb" %> /*This was wrong*/ 

所以,當我試圖運行應用程序時,在的Application_Start我全球.asax沒有初始化集線器。這就是爲什麼它無法解析signalr /集線器

在我的Global.asax

<%@ Application Inherits="_Global" Language="VB" %> 

固定,這一點,這在我的Global.asax.vb:

Public Class _Global 
    Inherits System.Web.HttpApplication 
+0

注 - 在SignalR 2.0版本中不再需要映射中心:http://www.asp.net/signalr/overview/signalr-20/getting-started-with-signalr-20/upgrading-signalr-1x-projects -to-20 – John

14

這樣做的原因404錯誤是集線器沒有映射,以前它必須按SimonF的回答完成。如果您使用SignalR版本2 RouteTable.Routes.MapHubs();現已過時。對於映射集線器,您可以創建一個啓動類,如下所示。

[assembly: OwinStartup(typeof(WebApplication1.Startup))] 
namespace WebApplication1 
{ 
    public class Startup 
    { 
     public void Configuration(IAppBuilder app) 
     { 
      // Any connection or hub wire up and configuration should go here 
      app.MapSignalR(); 
     } 
    } 
} 

referenace:http://www.asp.net/signalr/overview/releases/upgrading-signalr-1x-projects-to-20

+0

我認爲你錯了。使用'IAppBuilder'沒有重載'Application_Start' - 我無法在新的ASP.NET版本中找到 –

+0

從哪個類繼承了您的global.asax'公共類MvcApplication:System.Web.HttpApplication',我有使用MvcApplication類作爲這個,它爲我工作。我沒有繼續,我使用了'OwinStartup',所以我會再試一次並在Application_Start上更新你。但我可以保證第一絕對有效。 –

+0

@Simon_Weaver你是對的,有什麼不對。當我通過'IAppBuilder'在global.asax theres ** HTTP錯誤403.14 - 禁止**錯誤,它是去目錄瀏覽,我不知道爲什麼,沒有編譯錯誤。編輯答案並刪除第二種方法 –

0

有這404可能有多個原因 - 一些常見的可以通過

  • 點擊的URL在瀏覽器/ signalr /集線器中找到 - 如果有是一個錯誤,你會看到完整的錯誤回來。
  • 檢查HubName的重複屬性,如果你有基類
  • 確保您在所有項目中引用(以避免綁定錯誤)的正確版本
0

對我來說,解決辦法是reinstall所有的包並恢復所有的依賴。

打開nuget powershell並使用此命令。

Update-Package -Reinstall 
0

我能夠在web.config中改變以下appSetting爲 「true」 來解決在〜/ signalr /集線器404。

<add key="owin:AutomaticAppStartup" value="false" /> 
0

我有同樣的問題,它使用signalR是一個asp.net項目,一切正常之前,我發表的,但是當我主持它在IIS中,它沒有。

後,我檢查,我意識到了地址/ signalr /集線器是不正確的,讓我解釋更多,只是做以下步驟:

  1. 在瀏覽器中打開你的Web應用程序(使用IIS)你看到你設計的界面,是嗎?現在按ctrl+U或在頁面上右鍵單擊選擇查看頁面源。

  2. 你會看到多個環節開始<script>標籤頁面的頂部,發現像<script src="/signalr/hubs"></script>現在一下就可以了,如果你帶到這涉及在網頁「404 - 文件或目錄未找到」你對於定義地址一些錯誤,找到真正的地址,並在地址欄更改地址,觀察真實結果

在我來說,我需要在地址開始加我的項目名稱,所以我必須改變地址:

<script src="/signalr/hubs"></script>

<script src="/MoveShape/signalr/hubs"></script>

其中MoveShape是我的項目名稱,現在在瀏覽器中按下ctrl+U並按照先前告訴步驟後,你點擊鏈接,這時候你看到真實的結果,頁面顯示代碼開頭:

/*! 
* ASP.NET SignalR JavaScript Library v2.2.2 
* http://signalr.net/ 
* 
* Copyright (c) .NET Foundation. All rights reserved. 
* Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. 
* 
*/ 

是啊!就是這樣,它工作正常,請記住,當我使用Visual Studio測試它時沒有問題,但是在IIS中託管後沒有問題,因爲其他人建議使用<%= ResolveUrl("~/") %>或其他方法來創建正確的地址。