3

最近、ASP.NETMVC3アプリケーションで0.4.0からSignalR0.5.2に更新しました。SignalR 0.5.2では、Contextインスタンスの「User」プロパティnullはユーザーが切断したときのものです-これは仕様によるものですか?

以下の「イミディエイトウィンドウ」スナップショットからわかるようContextに、クライアントが切断するタイミングについて私が知っているのは、切断しているクライアントのConnectionIdだけです。

Context
{SignalR.Hubs.HubCallerContext}
    ConnectionId: "... some connection id ..."
    Headers: null
    QueryString: null
    RequestCookies: null
    ServerVariables: null
    User: null

簡略化すると、SignalRのHub実装は次のようになります。

public class MyHub : Hub, IDisconnect, IConnected
{
    // some other code

    public Task Disconnect()
    {
        var user = Context.User; // <-- This is null
        // more code
    }
}

要約すると、私はここで何かを忘れているのでしょうか、それともContext.Userが設計によるものnullでしょうか?もしそうなら-なぜですか?:)

4

1 に答える 1

5

SignalR wiki で答えを見つけました。ハブに関するセクション ( https://github.com/SignalR/SignalR/wiki/Hubs ) には、次のように記載されています。

クライアントが切断されるたびに、IDisconnect を実装するすべてのハブで Disconnect メソッドが呼び出されます。このメソッドが呼び出されると、Context.ConnectionId を使用して、切断されたクライアントにアクセスできます。 注: このメソッドはサーバーから呼び出されます。つまり、Caller オブジェクトの状態、接続の状態、および HubContext のユーザーと Cookie は読み込まれません。

于 2012-07-18T16:53:17.003 に答える