3

PersistentConnectionSignalrにクラスを実装しています。私たちのサイトでは、メッセージをブロードキャストできるようにする必要があります。次に、各接続で、特定のメッセージが特定のユーザーに関連しているかどうかを判断してから、パイプを介してブラウザーに送信する必要があります。

このようなもの:

public class MyConnection : PersistentConnection {

    private int _UserID;

    public override void OnSending(object message) {
        var msg = message as MyNotification;
        if(msg != null && !msg.CanRead(_UserID))
            return;
        base.OnSending(message);
    }

}

これは可能ですか?

現在、カスタム セッション状態オブジェクトがあります。接続時に、ID がユーザー セッション オブジェクトに追加されます。送信するメッセージがある場合、イベントを発生させ、各セッションはメッセージを関連付けられたクライアント ID に渡すかどうかを決定します。これを私たちのセッションオブジェクトから切り離したいのです。

4

1 に答える 1

7

ハブ パイプライン モジュールを作成して、この効果を得ることができます。

たとえば、次のことができます。

public class MyModule : HubPipelineModule
{
    protected override bool OnBeforeOutgoing(IHubOutgoingInvokerContext context)
    {
        return context.Connection.ShouldSend();
    }
}

次に、Application_Start で:

GlobalHost.HubPipeline.AddModule(new MyModule());

もちろん、ShouldSend メソッドを IConnection インターフェイスと対応する接続​​オブジェクトに追加する必要がありますが、これにより目的の結果が得られます。

ハブ パイプライン モジュールの詳細については、http://weblogs.asp.net/davidfowler/archive/2012/11/11/microsoft-asp-net-signalr.aspx のハブ パイプライン セクションを参照してください。

于 2013-01-21T18:15:16.007 に答える