Server-zu-Client-Nachrichten, die in ASP.NET MVC 4 nicht mit SignalR übertragen werden

Ich habe eine einfache Test-App erstellt, um ein Problem in meiner Haupt-App zu reproduzieren.

Ich habe folgende Hubklasse:

[HubName("testHub")]
public class TestHub : Hub
{
    public TestHub()
    {
        System.Diagnostics.Debug.WriteLine("TestHub instantiated");
    }

    public void RunMe()
    {
        System.Diagnostics.Debug.WriteLine("Client Started");
    }

    public static void Notify(string msg)
    {
        var hubContext = GlobalHost.ConnectionManager.GetHubContext<TestHub>();
        hubContext.Clients.All.notify("Hello!");
    }
}

Meine Testwebseite ist:

<form action="javascript: void(0)" method="post">
    <input type="button" value="Do It!" onclick="hitHub()"/>
</form>

<div id="error"></div>
<script type="text/javascript">
    var tHub;    
    $(document).ready(function () {
        tHub = $.connection.testHub;
        tHub.notify = function (msg) {
            alert(msg);
        }
        $.connection.hub.start().done(function () {
            tHub.server.runMe();
        });
    });

    function hitHub() {
        $.ajax({
            type: "POST",
            url: "@Url.Content("~/Hub/Test")" ,
            success: function (data, textStatus, jqXHR) {
            },
            error: function (data, textStatus, jqXHR) {
                $("#error")[0].innerHTML = data.responseText;
                alert("Error notifying hub.");
            }
        });

    }
</script>

Und zum Schluss mein HubController:

public class HubController : Controller
{
    [AcceptVerbs(HttpVerbs.Post)]
    public void Test()
    {
        TestHub.Notify("Got it!");
    }
}

In meinem Application_Start rufe ich RouteTable.Routes.MapHubs () auf;

Der Hub wird instanziiert. Dann wird der Aufruf von runMe () an den Server übergeben. Das alles funktioniert gut.

Wenn ich auf "Do It!" Klicke, schlägt der Vorgang fehl. Taste. hitHub () wird aufgerufen und meine HubController.Test () -Methode wird aufgerufen. TestHub.Notify ("Verstanden!") Wird fehlerfrei ausgeführt, es passiert jedoch nichts auf dem Client.

Was habe ich verpasst?

Update 1: Basierend auf der Antwort von JcFx, wurde das oben stehende Javascript so geändert, dass tHub.notify gesetzt ist, bevor $ .connection.hub.start () aufgerufen wird. Das Problem bleibt jedoch bestehen.

Update 2: Was der Geiger sieht:

Update 3: Wenn ich den MessageBus.Publish () -Aufruf nachverfolge, stelle ich fest, dass für das Thema keine Abonnements vorhanden sind, sodass das Thema nie geplant wird. Ich bin mir nicht sicher, wann ich das Abonnement abschließen soll ...

Antworten auf die Frage(1)

Ihre Antwort auf die Frage