2014-11-05 40 views
5

SignalR đang làm việc trong khi dự án là ASP.NET MVC3. Bây giờ tôi nâng cấp nó lên MVC5 (không dễ dàng như vậy, tôi phải nói với bạn)./signalr/hub 404 sau khi cập nhật lên MVC5

Sau đó, tôi nhận thấy rằng signalR không hoạt động. Tôi đã đi qua cuốn sách, cài đặt lại SignalR cho phiên bản 2.1.0, cài đặt OWIN (phải có cho v2 +) và thêm lớp khởi động để dự án.

này được lớp startup.cs của tôi, nó nằm ở thư mục gốc của dự án:

[assembly: OwinStartup(typeof(SISTEM.Startup))] 
namespace SISTEM 
{ 
    public class Startup 
    { 
     public void Configuration(IAppBuilder app) 
     { 
      app.MapSignalR(); 
     } 
    } 
} 

tôi thấy không có vấn đề ở đây, nhưng có lẽ tôi đang thiếu cái gì ...

Bây giờ đây là đoạn từ trung tâm:

namespace SISTEM 
{ 
    public class PostingHub : Hub 
    { 
     public void Test(string hello) 
     { 
      Clients.All.hello(hello); 
     } 
    } 
} 

proxys Sau đó, tôi tham chiếu được tạo theo quan điểm:

<script src="~/Scripts/jquery.signalR-2.1.0.min.js"></script> 
<script src="~/signalr/hubs"></script> 

Tôi kiểm tra nó ở chế độ khó hiểu và tôi có thể thấy yêu cầu/signalr/hubs đang tạo HTTP 404 không tìm thấy.

Bây giờ, tôi đã không lười biếng, tôi đã cố gắng một vài điều:

  • patch IIS cho URL extensionless - Không nên là một vấn đề kể từ khi tôi đang sử dụng win8
  • RouteTable.Routes.MapHubs
  • Gọi() trước khi RegisterRoutes (RouteTable.Routes) - VS sẽ không cho phép nó. Cung cấp cho tôi một lỗi nói rằng đó là lỗi thời, sử dụng OWIN.
  • Công cụ được tải xuống để tạo proxy javascript (UtarR Utils), vì vậy tôi có thể tham khảo thủ công chúng sau này. Cố gắng tạo ra, không có lỗi, nhưng js được tạo ra trống. Đã thử nhiều lần. Điều này là dành cho tôi thú vị nhất. Có thể vì một số lý do proxy không thể được tạo ra.

Mọi trợ giúp sẽ được đánh giá cao.

UPDATE: Phản hồi từ/signalr/hub

<!DOCTYPE html> 
<html> 
<head> 
    <title>The resource cannot be found.</title> 
    <meta name="viewport" content="width=device-width" /> 
</head> 

<body bgcolor="white"> 

     <span><H1>Server Error in '/' Application.<hr width=100% size=1 color=silver></H1> 

     <h2> <i>The resource cannot be found.</i> </h2></span> 

     <font face="Arial, Helvetica, Geneva, SunSans-Regular, sans-serif "> 

     <b> Description: </b>HTTP 404. The resource you are looking for (or one of its dependencies) could have been removed, had its name changed, or is temporarily unavailable. &nbsp;Please review the following URL and make sure that it is spelled correctly. 
     <br><br> 

     <b> Requested URL: </b>/signalr/hubs<br><br> 

     <hr width=100% size=1 color=silver> 

     <b>Version Information:</b>&nbsp;Microsoft .NET Framework Version:4.0.30319; ASP.NET Version:4.0.30319.34212 

     </font> 

</body> 

[HttpException]: The controller for path &#39;/signalr/hubs&#39; was not found or does not implement IController. 
at System.Web.Mvc.DefaultControllerFactory.GetControllerInstance(RequestContext requestContext, Type controllerType) 
at System.Web.Mvc.DefaultControllerFactory.CreateController(RequestContext requestContext, String controllerName) 
at System.Web.Mvc.MvcHandler.ProcessRequestInit(HttpContextBase httpContext, IController& controller, IControllerFactory& factory) 
at System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContextBase httpContext, AsyncCallback callback, Object state) 
at System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContext httpContext, AsyncCallback callback, Object state) 
at System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.BeginProcessRequest(HttpContext context, AsyncCallback cb, Object extraData) 
at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() 
at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) 
+0

Nó có nhấn dòng này "app.MapSignalR();" không? –

+0

Không, không. Điểm tốt. Nên dòng được nhấn vào ứng dụng bắt đầu? –

+0

Có, nếu không nó sẽ không ánh xạ đường signalR, để làm cho signalR làm việc nó phải nhấn dòng này khi ứng dụng của bạn bắt đầu. Kiểm tra kỹ tệp cấu hình của bạn, nếu bạn thiếu một cái gì đó liên quan đến OWIN. –

Trả lời

8

Bạn cần cài đặt gói Microsoft.Owin.Host.SystemWeb trong dự án

Xác nhận này link

Nếu gói không được cài đặt, sau đó cài đặt các pac sau kage từ Package Manager Console (PMC):

Install-Package Microsoft.Owin.Host.SystemWeb

CẬP NHẬT

Nó hoàn toàn nói rằng, nó không có khả năng phát hiện của bạn lớp khởi động, đây là vài phát hiện khác.

  • Tôi tin rằng chìa khóa này không tồn tại trong tập tin cấu hình <add key="owin:AutomaticAppStartup" value="false" />
  • ứng dụng của bạn có thể được lưu trữ trong thư mục temp, cố gắng xóa các tập tin tạm thời cho ứng dụng của bạn. (Tới chạy>% TEMP%> CTRL + A > Xóa)

Điều này chắc chắn sẽ hiệu quả, nếu không, hãy thử tạo signalR trong dự án mẫu.

+1

no may mắn. Tôi cài đặt lại Microsoft.Owin.Host.SystemWeb từ phiên bản 2 lên phiên bản 3 nhưng không có gì thay đổi. Tôi sẽ cập nhật bài đăng của tôi để bạn xem câu trả lời cho/signalr/hubs yêu cầu. app.MapSignalR(); vẫn không bị tấn công. –

+1

kiểm tra liên kết này http://blogs.msdn.com/b/praburaj/archive/2013/12/02/owin-startup-class-not-detected.aspx VÀ http: //www.asp .net/aspnet/overview/owin-and-katana/owin-startup-class-phát hiện –

+2

Xóa thư mục tạm thời là 90% dung dịch. Nó bắt đầu nhấn app.MapSignalR(); sau đó. Có một vấn đề phụ thuộc khác sau đó nhưng đó không phải là vấn đề thực sự. Cảm ơn tất cả sự giúp đỡ của bạn. –

3

Như Milos đã nói, việc xóa thư mục tạm thời có thể sẽ khắc phục được sự cố. Tôi đã tạo ra một kịch bản để làm điều này mà tôi gọi powerreset.cmd cần được Run as administrator:

@echo off 
@iisreset /stop 
@robocopy e:\empty "C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files" /PURGE 
@robocopy e:\empty "C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files" /PURGE 
@iisreset /start 

Các e: \ thư mục rỗng, mà sẽ là nguồn và sử dụng thanh trừng với robocopy thì nên rõ ràng các tệp tạm thời.

0

Phiên bản SignalR js được cho là giống nhau, nhưng có thể khác nhau. Là một tác dụng phụ, bạn sẽ thấy lỗi đó trong bảng điều khiển trình duyệt.

Kiểm tra phiên bản thư viện SignalR trong thư mục Tập lệnh và được tham chiếu trong chế độ xem của bạn.

  • ~/Scripts/jquery.signalR-2.1.0.min.js (SignalR hướng dẫn);
  • jquery.signalR-2.2.1.min.js được cài đặt vào thư mục tập lệnh (cài đặt nuget: cài đặt gói Microsoft.AspNet.SignalR).

Đôi khi những điều rõ ràng nhất không được chú ý.

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