1

特定のクライアントにメッセージを送信できるようにしたいのですが、動作するコードはありますが、ページの読み込み/更新ごとにクライアント ID が変更されるため、ユーザーを識別する方法が見つからないため、それに依存することはできません。接続にクエリ文字列を追加しようとしましたが、同じコンテキストのクエリ文字列しか見つかりませんでした。

これは私のハブであり、 send メソッド内で、メッセージを送信する時点で、送信された ID を特定の接続 ID に一致させたいと考えています。

public class Chat : Hub
{
    public string addMsg()
    {
        return "";
    }

    public void Send(string message, string id)
    {

        Clients.Client(Context.ConnectionId).receiveMessage(message);
    }
}

これが私のクライアントコードです。メッセージを送信する人のIDをサーバーのsendメソッドに渡し、他の接続ユーザーのクエリ文字列値を使用して、送信しているIDと一致させたいと考えています。

var chat = $.connection.chat;

chat.client.receiveMessage = function (message) {
  alert("Received from server: " + message);
};

chat.addMsg = function (message) {

};

$("#sendMessage").click(function () {
  chat.server.send($('#newMessage').val(), 6);
});

$.connection.hub.qs = "id=1";

$.connection.hub.start().done(function () {
  var myClientId = $.connection.hub.id;
  var qs = $.connection.hub.qs;
});

私の質問が理にかなっているといいのですが、しばらくの間これを解読しようとしています。以下は、私が今いる場所にたどり着くために使用した記事のいくつかへのリンクです。パズルの最後のピースが欠けているだけです。私に気楽に行ってください:)

http://weblogs.asp.net/davidfowler/archive/2012/11/11/microsoft-asp-net-signalr.aspx

SignalR- 特定のクライアントにデータを送信する

https://github.com/SignalR/SignalR/wiki/QuickStart-Hubs

4

2 に答える 2

3

これがあなたの望むようにうまくいくとは思えません。接続 ID は、特定の接続の識別子です。SignalR 自体は、ユーザーの認証について何も知りません。ただし、ASP.NET の上に構築されており、使い慣れた認証方法 (Windows、フォームなど) はすべて期待どおりに機能します。

ASP.NET がユーザーを認証すると、ハブでこれに としてアクセスできますContext.User。このユーザーと 1 つ以上の接続 ID の間のマッピングを維持するのは、あなた次第です。ブラウザーの更新に加えて、複数のブラウザーまたはマシンからサービスにアクセスするユーザーに対処する必要がある場合があります。このユーザーにメッセージを送信するということは、それらのすべてのブラウザーとマシンにメッセージを送信することを意味します。

Jabbrは、これらすべてとそれ以上のことを行います。これを実装する良い方法については、そのコードを実際に確認する必要があります。

于 2012-11-24T18:05:55.137 に答える