C# 信号器无法设置属性'';未定义的
我正在尝试在我的MVC4应用程序中设置信号器 问题是——即使当我浏览到path/signalr/hubs时,我确实看到了代码(fiddler为/signalr/hubs显示200OK),但它似乎没有包含对我的hub的任何引用,客户端代码也没有看到hub和方法 我在启动调试时遇到以下错误(IIS Express,VS Express 2012): Global.asax中的应用程序启动包含:C# 信号器无法设置属性'';未定义的,c#,asp.net-mvc-4,signalr,signalr-hub,C#,Asp.net Mvc 4,Signalr,Signalr Hub,我正在尝试在我的MVC4应用程序中设置信号器 问题是——即使当我浏览到path/signalr/hubs时,我确实看到了代码(fiddler为/signalr/hubs显示200OK),但它似乎没有包含对我的hub的任何引用,客户端代码也没有看到hub和方法 我在启动调试时遇到以下错误(IIS Express,VS Express 2012): Global.asax中的应用程序启动包含: //RouteTable.Routes.MapHubs("/signalr&
//RouteTable.Routes.MapHubs("/signalr", new HubConfiguration());
RouteTable.Routes.MapHubs();
RouteConfig.RegisterRoutes(RouteTable.Routes);
(我假设这会生成/signalr/hub,这似乎有效,但没有链接到我的实际hub。可以看出,我尝试了这两个选项)
在我的项目中,我在根目录中获得了带有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)
{
}
}
}
在my_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>
$(文档).ready(函数(){
//动态创建代理
var proxy=$.connection.messagehub;//这连接到我们的“messagehub”集线器,如上所述
//对于signar调用客户端函数,我们需要用Hub声明它
proxy.messageAll=函数(消息){
$(“#messages”).append(“”+message+”);//当中心调用此函数时,它会将文本附加到一个新的li项
};
//声明单击按钮时要调用的函数
$(“#广播”)。单击(函数(){
//调用Hub上的方法并从textbox传递文本
proxy.messageAll($(“#message”).val());
});
//启动连接
$.connection.hub.start();
});
(旁注-signar根本不喜欢@Scripts.Render(“~/bundles/jquery”),但直接jquery脚本include似乎可以工作)
那么为什么它不能准确识别“messagehub”?我解决了这个问题-我的解决方案包含多个项目,尽管我已经卸载了SignalR,但在bin/Debug文件夹中的一些项目中,仍然有我几个月前尝试过的较旧的SignalR版本的痕迹 在运行时,signer试图将一些旧dll和新引用连接起来。所以如果你有这个错误那么
- 卸载信号器
- 在整个解决方案文件夹中搜索“SignalR”,然后删除所有内容
- 从Nuget软件包管理器重新安装SignalR李>