2

私はSignalRRC2を使用しています、これは私のハブです

public class ImgHub : Hub
{
    public void Create(string guid)
    {
        Groups.Add(Context.ConnectionId, "foo");
    }

    public void SendMsg(string msg)
    {
        Clients.Group("foo").send(msg);
    }
}

このハブに接続するコンソールアプリケーションとWebアプリケーション(asp.net Webフォーム)があります。コンソールアプリケーションは私が期待するとおりに動作しますが、問題はJavascriptの部分にあります。SendMsgをこれに変更すると、SendMsgでClients.Groupを使用しているときに、「send」コールバックが起動しません。

public void ShareImage(byte[] image, string guid)
{
    Clients.All.ReceiveImage(image);
}

できます。これがJavascriptコードです

<script src="Scripts/jquery-1.7.1.min.js"></script>
<script src="Scripts/jquery.signalR-1.0.0-rc2.min.js"></script>
<script src="http://localhost:4341/signalr/hubs/" type="text/javascript"></script>
<script type="text/javascript">
    var mainHub;
    $(function () {
        $.connection.hub.url = 'http://localhost:4341/signalr';
        // Proxy created on the fly
        mainHub = $.connection.imgHub;

        mainHub.client.send = function (msg) {
            alert(msg);
        };

        // Start the connection
        $.connection.hub.start(function() {
            mainHub.server.create('vanuit den JS');
        })
            .done(function() {
                $('#msgButton').click(function() {
                    mainHub.server.sendMsg("msg from JS");
                });
            });
    });

</script>

JSコードでわかるように、SendMsg関数を呼び出すボタンもページにあります。メッセージはコンソールアプリケーションに届くので、JSクライアントはSignalRグループに正しく登録されていると思います。

私はJSのスペシャリストではないので、それについてもっと知っている人がここで私を助けてくれることを願っています。

4

2 に答える 2

2

これは、グローバル asax でグループの再参加を有効にする必要があるためです。

GlobalHost.HubPipeline.EnableAutoRejoiningGroups();

詳細はこちら: http://weblogs.asp.net/davidfowler/archive/2012/11/11/microsoft-asp-net-signalr.aspx

このメソッド呼び出しは 1.0 RTM で廃止されますが、今のところ実行する必要があります。

于 2013-01-19T18:55:10.813 に答える
0

send 関数が実行されない理由の 1 つは、クライアントで sendMsg の呼び出しを許可するまでに、クライアントがグループ "foo" にまだ含まれていない可能性があるためです。

$.connection.hub.start では、start が完了したときに呼び出される関数を登録していますが、.done を介して start が完了したときに呼び出される別の関数も登録しています。したがって、両方の関数がほぼ同時に起動しています。そのため、sendMsg 関数を呼び出すことができる場合、グループに正常に追加されていない可能性があります。

この問題を解決する方法は次のとおりです。

$.connection.hub.start().done(function() {
    mainHub.server.create('vanuit den JS').done(function() {
        $('#msgButton').click(function() {
            mainHub.server.sendMsg("msg from JS");
        });
    });
});

基本的に、sendMsg が通過できるようになるまで、グループへの参加が正常に完了するまで待機しています。

接続が開始されてからかなりの時間待っている可能性があり、まだ何も配線されていないため、これはロングショットの答えであることはわかっていますが、私は自分の側で動作を再現できません。

上記の修正が機能しない場合は、ブレークポイントを設定して、サーバー側の関数が呼び出されていることを確認する必要があります。

于 2013-01-18T22:18:16.690 に答える