2012-06-22 41 views
29

Tôi đang cố gắng triển khai một trang web SignalR trên IIS. Mã tất cả hoạt động tốt trong VS. Nhưng nhận được 404 không tìm thấy lỗi cố gắng để giải quyết tín hiệu/trung tâm cho đến nay tôi đã thử.SignalR/signalr/hub 404 Không tìm thấy

1) Thay đổi ref Script:

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

2) Sửa Web.Config bao gồm:

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

3) Thay đổi yêu cầu invoke trên IIS cho UrlMappingsModule.

4) đã thêm SignalR.Hosting.AspNet.dll để xem điều đó có giúp ích gì không.

Bạn không chắc chắn nên thử hoặc kiểm tra điều gì khác, bất kỳ sự trợ giúp hoặc điểm nào đi đúng hướng?

Trả lời

6

Hãy thử thêm một bản đồ ứng dụng ký tự đại diện cho máy chủ của bạn để giúp lập bản đồ mở rộng chưa biết trong URL kịch bản "~/signalr/hub"

+1

Ah Có! điều này làm việc tuyệt vời, cảm ơn! –

+1

nó cũng làm việc cho tôi! cảm ơn Chridam rất nhiều. Vấn đề của tôi là máy chủ đang tìm kiếm "localhost/signalr/hubs" sau đây (được xác định bằng bảng điều khiển dành cho nhà phát triển Chrome). Trong thực tế, url là động và do đó, điều này sẽ không nhận được tệp js cần thiết. –

0

Tôi không có vấn đề với việc định tuyến trong MVC3, nhưng đã nhận được con đường sai lầm. Tôi sẽ đề nghị bạn nhìn vào nguồn và xem nơi tập lệnh thực sự trỏ, đảm bảo rằng nó đang giải quyết thư mục ứng dụng ok. Và đảm bảo bạn có thể mở tệp một cách vật lý bằng đúng đường dẫn với trình duyệt của mình. Ví dụ.

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

Bạn có thể mở tệp từ trình duyệt (thay thế bằng thư mục con chính xác) không?

Nếu không, trung tâm có thể không được thiết lập chính xác và có thể hướng bạn đi đúng hướng. Fiddler nó.

Cú pháp tôi sử dụng là:

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

Nó có thể là sự khác biệt giữa Url.Content and ResolveUrl

29

Trình tự của các vấn đề đăng ký lộ trình. Tôi có vấn đề này chính xác và cố định nó bằng cách đảm bảo global.asax.cs của tôi trông như thế này:

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

Đây là một trang web sử dụng SignalR, MVC và WebAPI tất cả cùng nhau.

+2

Thông tin thêm dưới tiêu đề "lỗi 404 không tìm thấy" tại đây: http://www.asp.net/signalr/overview/troubleshooting-and-debugging/troubleshooting – cbp

+1

Hơn nữa - các trung tâm ánh xạ không còn được yêu cầu trong signalr 2.0 trở đi (và trong thực tế tạo ra một lỗi): http://www.asp.net/signalr/overview/signalr-20/getting-started-with-signalr-20/upgrading-signalr-1x-projects-to-20 – John

+0

Tôi không thể tin được điều này!!! cảm ơn bạn. – reckface

1

Đảm bảo AppPool của trang web của bạn nhắm mục tiêu phiên bản .NET Framework chính xác.

+0

Điều này giải quyết nó cho tôi. – Gigi

0

Vấn đề tương tự như trên phiên bản IIS, tôi đã khắc phục sự cố bằng cách khởi động lại AppPool, khởi động lại web và hoạt động của nó ngay bây giờ.

6

Nếu bạn đang làm việc trên webforms, hãy thực hiện các bước sau

  1. Trong webconfig:

    <validation validateIntegratedModeConfiguration="false" /> 
    <modules runAllManagedModulesForAllRequests="true"/> 
    
  2. Trong trang thêm tham chiếu đến trung tâm như

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

    inst ead của

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

đã hoạt động với tôi – shalke

+0

Bạn có biết cách xóa giây/tín hiệu không? – nZeus

1

Tôi có thể là hơi muộn nhưng hy vọng nó sẽ giúp một ai đó. Đảm bảo mã này chạy khi bắt đầu.

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

Bởi vì tôi đã thêm một global.asax để ứng dụng của tôi và sau đó một codebehind nhưng đặt này trong Global.asax nộp

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

Vì vậy, khi tôi đã cố gắng để chạy các ứng dụng, các Application_Start trong toàn cầu của tôi .asax không khởi tạo hub. đó là lý do tại sao nó không thể giải quyết signalr/hub

cố định với điều này trong Global.asax của tôi

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

và điều này trong Global.asax.vb tôi:

Public Class _Global 
    Inherits System.Web.HttpApplication 
+0

Lưu ý - Trung tâm lập bản đồ không còn được yêu cầu trong phiên bản SignalR phiên bản 2.0 trở đi: http://www.asp.net/signalr/overview/signalr-20/getting-started-with-signalr-20/upgrading-signalr-1x-projects -to-20 – John

14

Lý do của việc này Lỗi 404 là các hub không được ánh xạ, trước đó nó sẽ phải được thực hiện như được trả lời bởi SimonF. Nếu bạn đang sử dụng SignalR phiên bản 2 RouteTable.Routes.MapHubs(); hiện đã lỗi thời. Đối với các trung tâm ánh xạ, bạn có thể tạo một lớp khởi động như dưới đây.

[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

Tôi nghĩ bạn nhầm. Không có quá tải đến 'Application_Start' với' IAppBuilder' - tôi không thể tìm thấy trong phiên bản ASP.NET mới hoặc –

+0

từ lớp nào bạn đã thừa hưởng global.asax 'public class MvcApplication: System.Web.HttpApplication', tôi đã có sử dụng lớp MvcApplication như thế này và nó đã làm việc cho tôi. Tôi không tiếp tục với nó, tôi đã sử dụng 'OwinStartup' vì vậy tôi sẽ thử lại lần nữa và cập nhật cho bạn trên Application_Start. Nhưng tôi có thể đảm bảo 1 công việc chắc chắn. –

+0

@Simon_Weaver bạn nói đúng, có điều gì đó sai. khi tôi vượt qua 'IAppBuilder' trong global.asax theres ** Lỗi HTTP 403.14 - Cấm ** lỗi, nó sẽ cho duyệt thư mục, tôi không biết tại sao, không có lỗi biên dịch. Đã chỉnh sửa câu trả lời và xóa phương pháp thứ hai –

0

có khả năng nhiều nguyên nhân của 404 này - một vài cái chung có thể được tìm thấy bằng cách

  • Hit url trong trình duyệt/signalr/hub - nếu có là một lỗi, bạn sẽ thấy lỗi đầy đủ quay trở lại.
  • kiểm tra cho sự trùng lặp của HubName thuộc tính nếu bạn có lớp cơ sở
  • đảm bảo bạn có đúng phiên bản tham chiếu trong tất cả các dự án (như để tránh các lỗi ràng buộc)
0

Đối với tôi, giải pháp là để reinstall tất cả các gói và khôi phục tất cả các phụ thuộc.

Mở nuget powershell và sử dụng lệnh này.

Update-Package -Reinstall 
0

Tôi có thể sửa lỗi 404 trên ~/signalr/hub bằng cách thay đổi ứng dụng sauĐặt trong web.config thành "true".

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

Tôi đã có cùng một vấn đề, đó là một dự án asp.net sử dụng signalR, nó hoạt động đúng trước khi tôi xuất bản nhưng khi tôi lưu trữ nó trong IIS, nó không.

Sau khi tôi kiểm tra tôi nhận ra địa chỉ/signalr/hub là không đúng, hãy để tôi giải thích thêm, chỉ cần làm theo các bước sau:

  1. Mở ứng dụng web của bạn trong trình duyệt (Sử dụng IIS), bạn thấy giao diện bạn thiết kế, phải không? bây giờ nhấn ctrl+U hoặc nhấp chuột phải vào trang chọn Nguồn trang Xem.

  2. Bạn sẽ thấy nhiều liên kết bắt đầu bằng <script> thẻ ở đầu trang, tìm nội dung như <script src="/signalr/hubs"></script> bây giờ nhấp vào nó, nếu bạn được đưa đến trang có liên quan đến "404 - Tệp hoặc thư mục không tìm thấy". có một số sai lầm khi xác định địa chỉ, tìm địa chỉ thực và thay đổi địa chỉ trong thanh địa chỉ để quan sát kết quả thực sự

Trong trường hợp của tôi, tôi cần thêm tên dự án ở đầu địa chỉ, vì vậy tôi phải thay đổi địa chỉ từ:

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

để

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

trong đó MoveShape là tên dự án của tôi, bây giờ sau khi nhấn ctrl+U trong trình duyệt và theo các bước nói trên, bạn nhấp vào liên kết và lần này bạn sẽ thấy kết quả đúng, mã hiển thị trang bắt đầu bằng:

/*! 
* 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. 
* 
*/ 

yeah! đó là nó, nó hoạt động đúng, ghi nhớ rằng nó không có vấn đề khi tôi đã thử nghiệm nó bằng cách sử dụng Visual studio nhưng không sau khi lưu trữ trong IIS, như những người khác đã đề nghị thực hiện một địa chỉ chính xác bằng cách áp dụng <%= ResolveUrl("~/") %> hoặc các phương pháp khác.

Các vấn đề liên quan