0

ASP.NET MVC サーバーから Web クライアントにメッセージをプッシュするために SignalR を使用しています。

クライアントからの新しい接続が受け入れられたときに現在のクライアントの接続 ID を保存したいので、この特定のクライアントにデータを送信するときに、セッションからその接続 ID を取得してメッセージを送信できます。

ただし、OnConnected イベント ハンドラーでは、セッションは null です。その結果、connectionId をセッションに入れようとすると、コードで null 参照例外がスローされます。

これがコードスニペットです。

using Microsoft.AspNet.SignalR;

namespace TestSignalR
{
    public class SignalRServerListener : PersistentConnection
    {
        protected override System.Threading.Tasks.Task OnConnected(
                                          IRequest request, 
                                          string connectionId)
        {
            System.Diagnostics.Debugger.Break();

            System.Diagnostics.Debug.
             Print("Connection request received and accepted from 
             client with connection Id {0}", connectionId);

            HttpContext.Current.Session["connectionId"] = connectionId;

            return base.OnConnected(request, connectionId);
        }
    }
}
4

1 に答える 1

1

以下のようにクライアントを追跡できます

class MyConnections
{
    private static List<String> _MyClients = new List<String>();

    public override Task OnConnected()
    {
        _MyClients.Add(Context.ConnectionId);
        return base.OnConnected();
    }

    public override Task OnDisconnected()
    {
        _MyClients.Remove(Context.ConnectionId);
        return base.OnDisconnected();
    }

    public static bool IsConnected(string cid)
    {
        return _MyClients.Contains(cid);
    }
}

サーバーがこれらのクライアントの 1 つにデータを送信したい場合、Context.Connection.Send(connectionId, message) でどの接続 ID を使用する必要があるかをサーバーはどのように認識すればよいでしょうか?

Context.DefaultSignal
于 2013-05-28T17:27:54.163 に答える