2

SignalR と ASP.NET SignalR の間に重大な変更があることを認識し、それに対応するようにコードを変更しました。しかし、何らかの理由で、正しい変更を理解できません。

私が抱えている問題は、サーバーがクライアントにメッセージを送信していないことです。

古い SignalR コード:

サーバ

var context = GlobalHost.ConnectionManager.GetHubContext<Dashboard>();
var subscribers = context.Clients;

if (!string.IsNullOrWhiteSpace(message.Source))
{
    var subscriber = subscribers[message.Source];

    subscriber.messageReceived(message);
}

クライアント

$.connection.dashboard.messageReceived = function(){...};

新しいコード (ASP.NET SignalR):

サーバ

var context = GlobalHost.ConnectionManager.GetHubContext<Dashboard>();
var subscribers = context.Clients;

if (!string.IsNullOrWhiteSpace(message.Source))
{
    var subscriber = subscribers.Group(message.Source);             
    subscriber.messageReceived(message);
}

クライアント

$.connection.dashboard.client.messageReceived = function(){...};

誰かがここで何が問題なのかを理解するのを手伝ってくれますか?

4

1 に答える 1

0

コードロジックを機能させることができました。これが私があなたの論理から構築したものです:

サーバ:

public class Status : Hub
{
    public override Task OnConnected()
    {
        Groups.Add(Context.ConnectionId, "foo");
        return base.OnConnected();
    }

    public void foo()
    {
        var context = GlobalHost.ConnectionManager.GetHubContext<Status>();
        var subscribers = context.Clients;
        var subscriber = subscribers.Group("foo");
        subscriber.messageReceived("ello");
    }
}

クライアント:

var status = $.connection.status;

status.client.messageReceived = function (val) {
    alert(val);
}

$.connection.hub.start().done(function() {
    status.server.foo();
});

実装が機能しない理由についての私の唯一の考えは次のとおりです。

  1. ブロードキャスト先のグループに接続IDを追加していません(サーバー上のOnConnected関数を参照してください)。
  2. messageReceivedの.clientメソッドでは、値をパラメーターとして渡すことを許可していません。関数内でargumentsオブジェクトを解析しない限り、メッセージ値を取得することはできません。
  3. あなたのメッセージ。ソースが正しくありません

お役に立てれば!

于 2012-11-29T18:05:13.133 に答える