I'm having trouble getting SignalR server-side Hub code to invoke JS client methods. The reverse is working fine - so when my client sends a message to the server it is delivered as expected. I've been fairly careful to avoid obvious traps but I guess I'm still overlooking something. Here's my code:
From MessageHub.cs:
public bool SendMessage( ClientMessage message )
{
...
Clients.All.addMessage("my message");
...
}
Javascript:
$.connection.hub.start()
.done(function () {
messageHub = $.connection.message;
// addMessage is never invoked.
messageHub.client.addMessage = function (message) {
alert('message added');
};
/* // I tried this based on some sample code but still not invoked.
messageHub.addMessage = function (message) {
alert('message added');
};
*/
// This works as expected.
messageHub.server.registerUser(userId);
...
});
As mentioned above, I can't find any obvious deficiencies with the setup but here are a few possibly relevant points:
- The connection is established and server-side methods are invoked.
- It's probably irrelevant, but I've tried forcing different transports with no change in behaviour.
- The client method names do not conflict with the server method names at any point.
- I've also tried sending messages to specific client connections (which is actually the goal, in this case).
- I have logging enabled on both the client and server but don't see anything relevant in either case.
So, given the above, am I missing something obvious? If not, what is the best way to identify the failure point?
P.S. This isn't specifically related to the question, however, for some reason Fiddler is no longer capturing any traffic from any of my browsers, which makes debugging WS or HTTP traffic a bit challenging - I'm guessing that's a Windows 8 thing...