我正在尝试在我的MVC4应用中设置SignalR。
问题是 - 即使我浏览到路径/信号器/集线器时我确实看到了代码(并且fiddler为/ signalr / hubs显示了200OK),它似乎也没有包含对我的集线器和客户端代码的任何引用没有看到集线器和方法。
我在开始调试时遇到这些错误(IIS Express,VS Express 2012):
Global.asax中的Application_Start包含:
//RouteTable.Routes.MapHubs("/signalr", new HubConfiguration());
RouteTable.Routes.MapHubs();
RouteConfig.RegisterRoutes(RouteTable.Routes);
(我假设这会生成/ signalr / hubs,这似乎有效,但没有任何链接到我的实际集线器。可以看出我尝试了两种选择。)
在我的项目中,我在MessageHub.cs的根目录中找到了“Hubs”文件夹:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Microsoft.AspNet.SignalR;
using Microsoft.AspNet.SignalR.Hubs;
namespace Prj.Hubs
{
[HubName("messagehub")]
public class MessageHub : Hub
{
public void MessageAll(string message)
{
Clients.All.writeMessage(message);
}
public void MessageOthers(string message)
{
Clients.Others.writeMessage(message);
}
public void MessageSingle(string message)
{
}
}
}
在我的_Layout.cshtml中,我在结束标记之前:
<script type="text/javascript" src="~/Scripts/jquery-1.9.1.js"></script>
<script type="text/javascript" src="~/Scripts/jquery.signalR-1.1.2.js"></script>
<script src="/signalr/hubs" type="text/javascript"></script>
<script type="text/javascript">
$(document).ready(function () {
// create proxy on the fly
var proxy = $.connection.messagehub; // this connects to our 'messageHub' Hub as above
// for SignalR to call the client side function we need to declare it with the Hub
proxy.messageAll = function (message) {
$('#messages').append('<li>' + message + ''); // when the Hub calls this function it appends a new li item with the text
};
// declare function to be called when button is clicked
$("#broadcast").click(function () {
// calls method on Hub and pass through text from textbox
proxy.messageAll($("#message").val());
});
// Start the connection
$.connection.hub.start();
});
</script>
(旁注 - SignalR并不喜欢所有@ Scripts.Render(“〜/ bundles / jquery”),但直接的jquery脚本包括似乎有效。)
那为什么不识别“messagehub”呢?
答案 0 :(得分:1)
我解决了这个问题 - 我的解决方案包含多个项目,虽然我已经卸载了SignalR,但在bin / Debug文件夹中的某些项目中仍然存在我几个月前尝试过的旧版SignalR版本的痕迹。
在运行时,SignalR试图将一些旧的dll与新的引用连接起来。所以,如果你有这个错误,那么