我正在寻找快速而肮脏的答案。我只是在发呆,在盯着屏幕超过 12 个小时后,我想我被枪杀了。
我想做一个简单的 SignalR 应用程序作为教程。我找到了这个例子,但我不断收到票未定义的错误。我发现了更多,并不断收到相同的错误。我将示例项目与我的项目进行了比较,但找不到任何差异。
似乎$.connection.ticketHub
或$.connection.chat
正在返回未定义的对象。有什么特别需要我做的/signalr/hubs
吗?任何其他想法都非常感谢。
我正在寻找快速而肮脏的答案。我只是在发呆,在盯着屏幕超过 12 个小时后,我想我被枪杀了。
我想做一个简单的 SignalR 应用程序作为教程。我找到了这个例子,但我不断收到票未定义的错误。我发现了更多,并不断收到相同的错误。我将示例项目与我的项目进行了比较,但找不到任何差异。
似乎$.connection.ticketHub
或$.connection.chat
正在返回未定义的对象。有什么特别需要我做的/signalr/hubs
吗?任何其他想法都非常感谢。
您需要将 /signalr/hubs 添加到页面,它是由 SignalR 动态生成的 javascript,其中包含集线器的方法存根和集线器上的方法。
因此,如果您有一个名为 .NET-hub ,则会生成TestHub
一个名为 javascript 的方法,以便您可以从 JavaScript 调用:SendMessage(string message)
$.connection.testHub.sendMessage("some message to server");
将您的浏览器指向 url:/signalr/hubs,您应该会得到一个 javascript。
大约 150 行之后,您将看到 ticketHub 存根:
$.extend(signalR, {
ticketHub: {
_: {
hubName: 'YourNameSpace.TicketHub',
ignoreMembers: ['someMethod', 'namespace', 'ignoreMembers', 'callbacks'],
connection: function () { return signalR.hub; }
},
您可以使用 Mozilla Firebug 插件或 Chrome 开发者工具(扳手图标->工具->开发者工具)来查看发送到服务器和从服务器返回的内容。
编辑:SignalR 中有一个错误阻止正确生成 /signalr/hubs (它没有生成方法存根)。https://github.com/SignalR/SignalR/issues/134
EDIT2:您可能有一个不正确的脚本标签,请尝试:
<script src="@Url.Content("~/signalr/hubs")" type="text/javascript"></script>
或者您没有引用SignalR.AspNet.dll
程序集。如果我没记错的话,就是那个组件将路由连接到 /signalr。
Lee Smiths 的回答是正确的。我从 nuget 获得了最新的 json2,并确保您在 signalR 常见问题解答网站的 web.config 中进行了更改:
<system.webServer> <modules runAllManagedModulesForAllRequests="true" /> </system.webServer>
你用的是IE8吗?
如果是,请确保在 signalR 脚本上方包含 Json2 脚本引用:
<script src="../../Scripts/json2.min.js" type="text/javascript"></script>
(从 Nuget 获取 Json2)
使用 Visual Studio 2010 / MVC 3 / Firefox Browser ,我的 Index.cshtml 使用 SignalR 就可以了
<script src="@Url.Content("~/Scripts/jquery-1.8.0.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.signalR-0.5.2.min.js")" type="text/javascript"></script>
<script src="/signalr/hubs" type="text/javascript"></script>
我遇到了另一个问题,但我不必将@Url.Content 添加到信号器/集线器中为了简化测试,我也只是将我的类文件放在 Controllers 文件夹的根目录中。我也有来自 Nuget 的以下内容
SignalR / SignalR.Js / SignalR.Server / SignalR.Hosting.AspNet / SignalR.Hosting.Common
(并不是说您需要所有这些依赖项,但这就是我所拥有的)
希望对某人有所帮助...
将您的脚本标签更改为此:
<script type="text/javascript" src='<%= ResolveClientUrl("~/signalr/hubs") %>'></script>