I added support for SignalR to one of the ASP.Net MVC applications I develop, mainly following this Microsoft tutorial.
I was surprised by the fact that you cannot install the SignalR package from the NuGet GUI (in VS 2013 at least), but need to switch to the Package Manager Console and type
install-package Microsoft.AspNet.SignalR
It worked nevertheless.
I also copied the JS initialization code from there
$(function () {
// Declare a proxy to reference the hub.
var chat = $.connection.chatHub;
chat.client.broadcastMessage = function (name, message) { ... };
}
(adjusted, of course, to the hubs defined in my project), only to find that the JavaScript console in Chrome Developer Tools displays the error message
Uncaught TypeError: Cannot read property 'client' of undefined at HTMLDocument. (38024:10393) at fire (jquery-1.12.4.js:3232) at Object.fireWith [as resolveWith] (jquery-1.12.4.js:3362) at Function.ready (jquery-1.12.4.js:3582) at HTMLDocument.completed (jquery-1.12.4.js:3617)
The error is raised by the line
chatHub.client.broadcastMessage = function (name, message) {
with chatHub being undefined.
I stepped through the JavaScript code and found that the (automagically generated) JavaScript file
< script src="@Url.Content("~/signalr/hubs")" >< /script>
defines the hubs correctly, but somehow the hub definitions are lost when the
$(function() {
is being executed.
It turned out to be a question of JavaScript scopes, and I moved the client callback definition out of the jQuery $(function(){}) directly into the