0

私は前にこの質問をしましたが、それは非常に良い反応を得ました。しかし、私はasp.net(およびjquery)を初めて使用するため、プログラムがどのように流れているかを理解できません。

概要:

基本的なチャットアプリケーションを作成しました。今、私はユーザーがオンライン(サーバーに接続されている)のときはいつでも、サーバーはそのサーバーに接続されているすべてのユーザーに利用可能なオンラインユーザーのユーザー名を表示またはブロードキャストする必要があるような高度な機能を追加しようとしています。

前の質問(s0nicaVinayC)への回答を参照して、classファイルとjqueryファイルを変更しました。これらは、以下のリンクに示すようにエラーを出します。(私はとても近いと思います)

Chat.cs 2つのエラー、コードコメント間のエラーについて言及しました
file.js正常に動作しています。必要に応じて参照してください

上記のファイルをご覧になり、私を助けてください。

PS:前回の投稿では、Global.asaxコードを変更すれば、問題は解決するだろうと思っていました。後で間違っていることに気づきました。

4

1 に答える 1

1

最初のエラー:

Clients.joins(Context.ConnectionId, Caller.username, DateTime.Now);

する必要があります:

Clients.All.joins(Context.ConnectionId, Clients.Caller.username, DateTime.Now);

関連するその他のエラー: JS ファイルでは次のようになります: 行 15

chat.state.username = chatUsername;

2番目のエラー: エラーはまさにそのとおりです。辞書オブジェクトから toList 関数がありません。次に、List または文字列を Chat オブジェクトに直接変換することはできません。

セットアップに基づいて、現在、返す適切な「ユーザー」リストがありません。現在、個々のユーザーを表すリストを保存しています。辞書オブジェクトを次のように変更してみてください。

static ConcurrentDictionary<string, User> _users = new ConcurrentDictionary<string, User>();

ユーザーの場所:

public class User
{
    public string Name { get; set; }
    public string ConnectionID { get; set; }
}

次に、 Joined 関数で次のことができます。

public void Joined()
{
    User user = new User 
    { 
        Name = Clients.Caller.username,
        ConnectionID = Context.ConnectionId
    };

    _users.TryAdd(user.ConnectionID, user);
    Clients.All.joins(user.ConnectionID, user.Name, DateTime.Now);
}

最後に、GetConnectedUsers が終了します (「System.Linq; を使用していることを確認してください」):

public List<User> GetConnectedUsers()
{
    return _users.Values.ToList();
}

私はおそらく少し船外に出ましたが、うまくいけばこれが役に立ちます!

SignalR 0.5.3 から 1.0 alpha への変更ログへの参照が必要な場合は、すべての変更に関するすばらしい投稿があります: http://weblogs.asp.net/davidfowler/archive/2012/11/11/microsoft-asp -net-signalr.aspx

于 2012-12-06T19:01:21.357 に答える