4

正しい文脈を設定するために、問題を説明しましょう。RC1 までは、GenerateConnectionIdPrefix() を実装して、ユーザー ID を接続 ID のプレフィックスとして使用していました。その後、必要なときにいつでも接続文字列からユーザー ID を取得できます。

RC2 では、IConnectionIdPrefixGenerator を継承できなくなり、GenerateConnectionIdPrefix を実装できなくなりました。そのため、ハブのプロパティをデータで設定するために利用できる他の手段は何だろうと思っていました。これは、接続の存続期間中持続します。

ドキュメントを調べてみると、クエリ文字列を設定するのが 1 つの方法であることに気付きましたが、それは呼び出しごとに設定する必要があることを意味します。ラウンドトリップ状態を設定することも別のオプションかもしれませんが、それでさえ、生涯ではなく、単一のラウンドトリップに対して永続的であるように見えます。

したがって、私の最終目標は、接続の有効期間全体で使用できる SignalR 接続の開始時に一度プロパティに設定されます。

現在何も利用できない場合、次のバージョンで同様のことを実現するためのサポートを追加する計画はありますか?

[更新] 以下に示すように、OnConnected メソッドで状態 Clients.Caller.Userid を設定しようとした後、後続の呼び出しでそれにアクセスしようとしたところ、null であることがわかりました。両方の呼び出しは同じ接続 ID からのものです。

4

1 に答える 1

9

https://github.com/SignalR/SignalR/wiki/Hubsの「クライアントとサーバー間の往復状態」セクションを見てください。

基本的に、またはクライアントによって呼び出されるものClients.Callerなどのハブ メソッドで、動的プロパティから読み書きできます。OnConnected元:

using System;
using System.Threading.Tasks;
using Microsoft.AspNet.SignalR;

namespace StateDemo
{
    public class MyHub : Hub
    {
        public override Task OnConnected()
        {
            Clients.Caller.UserId = Context.User.Identity.Name;
            Clients.Caller.initialized();
            return base.OnConnected();
        }

        public void Send(string data)
        {
            // Access the id property set from the client.
            string id = Clients.Caller.UserId;

            // ...
        }
    }
}

この方法で保存された状態は、接続の存続期間中保持されます。

SignalR JS クライアントを使用してこの状態にアクセスする方法については、https://github.com/SignalR/SignalR/wiki/SignalR-JS-Client-Hubsの「ラウンドトリップ状態」セクションを参照してください。

IConnectionIdPrefixGenerator次の SO 回答で説明されていないユーザーを追跡する方法は他にもあります: SignalR 1.0 beta connection factory

于 2013-01-28T21:03:20.610 に答える