这就是我做的 .
-
我用nuget来获取我的MVC4项目的SignalR .
-
在我的控制器中创建了一个MyHub类(SignalRTestController.cs)
-
在“索引操作”中,尝试从集线器外部广播消息并返回视图 .
-
在视图中,引用了所有脚本和/ signalr / hubs .
问题是没有找到/ signalr / hubs(抛出404) .
我的项目有区域,结构如下所示:
-
MVCProject
-
地区
-
SubFolder
-
控制器
-
SignalRTestController.cs
-
型号
-
查看
-
Index.cshtml
-
控制器
-
型号
-
查看
-
脚本
signalR的所有脚本都在Scripts文件夹中,我的SignalRTestController.cs看起来像这样:
namespace SignalRTest.Controllers
{
public class SignalRTestController : Controller
{
public ActionResult Index()
{
// Do some work here
// Broadcasting over a Hub from outside of a Hub
var context = GlobalHost.ConnectionManager.GetHubContext<MyHub>();
context.Clients.say("Hello SignalR!");
return View();
}
}
[HubName("MyHub")]
public class MyHub : Hub
{
public void Say(string message)
{
Clients.sendMessage(message);
}
}
}
任何我的Index.cshtml都引用了所有的javascripts和/ signalr / hubs,如下所示://其他Javascripts
script type =“text / javascript”src =“/ signalr / hubs”/>
我认为控制器很好,但我没有得到/ signalr / hubs . 它投掷404并且Chrome控制台中的消息是这样的:
资源解释为脚本但使用MIME类型text / html传输:“http://www.myproject.com/signalr/hubs” . Uncaught SyntaxError:意外的令牌<hubs:2 Uncaught SignalR:加载集线器时出错 . 确保您的集线器引用正确,例如script src ='/ signalr / hubs'> .
脚本作为html返回的原因是服务器返回404未找到 .
我不确定是什么问题 . 我认为这可能是一个路由问题 . 我不确定,如果我们需要在/ signalr / hubs的项目中添加任何路由信息,或者我在这里遗漏了一些东西 .
仅供参考:当我创建一个新的空MVC项目并添加signalR并开始处理它时,它完全正常 . 无需添加路由 .
此外,我在某些地方使用默认路由和属性路由 . 但控制器SignalRTestController不使用属性路由 .
7 回答
你有没有调用RouteTable.Routes.MapHubs()(可能在Global.asax中)?如果是这样,尝试摆脱它,看看它是否解决了你的问题 . - 皮特11月16日17:22
我一直在玩它 . 看来在当前版本中(因为我需要一个签名的程序集,我得到了最新的源代码),你必须调用RouteTable.Routes.MapHubs() . 但是要使它工作,必须首先调用它(或者至少在调用RouteConfig.RegisterRoutes()之前调用它) . 如果之后调用它,MVC会为它寻找一个控制器,但这不起作用 . 在我通过nuGet使用的早期版本中,删除RouteTable.Routes.MapHubs()可以解决问题,但现在似乎是必需的 . 希望这很有帮助 . - 皮特11月27日20:53
显然,您通过将RouteTable.Routes.MapHubs()更改为:RouteTable.Routes.MapHubs(“〜/ signalr”)来解决问题 .
MapHubs现在已经过时了 . 在Owin启动类中使用MapSignalR扩展方法,如下所示:
我遇到了同样的问题 . 这是修复:
Nuget没有添加所有必要的参考文献 . 我重申了这个命令:
并添加了一些参考:
Microsoft.AspNet.SignalR.Hosting.Aspnet
Microsoft.AspNet.SignalR.Hosting.Common
一旦完成,它就像一个冠军!
你有参考问题 . 请执行下列操作:
@ Scripts.Render( “〜/捆绑/ signalR”)
/ signalr /集线器
就像在这个页面上完成的那样:http://blog.devscrum.net/2011/12/getting-started-with-signalr-in-asp-net-mvc/(其中所说的部分:"In index.cshtml add the following code")
尝试将
[HubName("MyHub")]
更改为[HubName("myHub")]
,并确保在javascript中创建代理的任何位置进行更新 . 它过去对我有用 .就我而言,我不小心在不同的位置创建了两个具有相同名称的Hub类(两个派生自Hub的类) . 我删除了一个,这一切都有效 .
就我而言,我必须删除web.config appSettings中的一个键: