9

ハブのOnConnectedおよびOnDisconnectedオーバーライドが起動しないという問題があります。

レプリケーションの目的で、非常に単純なハブがあります。

public class OnlineHub : Hub
{
    public void TestMethod()
    {
        var a = 1;
    }

    public override System.Threading.Tasks.Task OnConnected()
    {
        return Clients.All.connected(Context.ConnectionId, DateTime.Now.ToString());
    }

    public override System.Threading.Tasks.Task OnDisconnected()
    {
        return Clients.All.disconnected(Context.ConnectionId, DateTime.Now.ToString());
    }
}

そしてaspxページ:

<script type="text/javascript">
    $(function () {
        $("#btn").click(function () {
            $.connection.onlineHub.server.testMethod();
        });

        $.connection.onlineHub.server.connected = function (id, date) {
            $("#results").append("connected: " + id + " : " + date + "</br>");
        };

        $.connection.onlineHub.server.disconnected = function (id, date) {
            $("#results").append(("connected: " + id + " : " + date + "</br>");
        };

        $.connection.onlineHub.connection.start();
    });

</script>

jQuery1.6.4とsignalR1.0.0-alpha2を使用しています。クライアント側の接続メソッドと切断メソッドが実行されていません。また、OnConnectedまたはOnDisconnectedにブレークポイントを設定しても、ブレークポイントはヒットしません。

TestMethodがokを呼び出し、signalRのネゴシエート呼び出しからconnectionIdが返されるため、接続が確立されています。

簡単なものが欠けていると思います。

前もって感謝します。

4

4 に答える 4

14

クライアント ハンドラは、おそらく次のようになります。

$.connection.onlineHub.client.connected = function(){...}
于 2012-12-10T11:30:21.960 に答える
7

また、ハブでイベントを発生させるには、少なくとも 1 つのクライアント コールバックをスクリプトで定義する必要があることもわかりました。OnConnected と OnDisconnected が呼び出されることが予想される場合は、これに注意してください。

于 2015-09-01T06:05:12.373 に答える
2

理解した。クライアントではなくサーバー オブジェクトでメソッドを呼び出していました。

$.connection.onlineHub.server.connected = function (id, date) {
        $("#results").append("connected: " + id + " : " + date + "</br>");
    };

    $.connection.onlineHub.server.disconnected = function (id, date) {
        $("#results").append(("connected: " + id + " : " + date + "</br>");
    };

する必要があります

$.connection.onlineHub.client.connected = function (id, date) {
        $("#results").append("connected: " + id + " : " + date + "</br>");
    };

    $.connection.onlineHub.client.disconnected = function (id, date) {
        $("#results").append(("connected: " + id + " : " + date + "</br>");
    };

したがって、signalR が OnDisconnected または OnConnected 内のタスクに対して定義されていない場合、それらは起動されないように見えます。これは理にかなっています。

于 2012-12-10T12:09:36.400 に答える