編集: David Fowler は、問題を再現するために完全なコードを要求しました。ここに完全なコードがあります
ここに再現されたコードに加えて、完全な Visual Studio 2010 ソリューションも次の URL にアップロードしました。
http://www.sendspace.com/file/lfeurf (URL は期限切れになり、機能しなくなりました)
お気軽にダウンロードしてお試しください。
ここに私の発見があります
- Hub コードにグループを 1 つだけ追加すると、アプリケーションは問題なく正常に動作します。
- 2 つのグループを追加すると、信号機が機能しなくなるか、一方向にのみ機能します。つまり、メッセージはブラウザ 1 からブラウザ 2 に送信されますが、ブラウザ 2 からブラウザ 1 には送信されません。
元の質問: MVC3 Web サイトで Signalr 1.0.0-rc1 を使用しています。クライアントが複数のグループに所属する必要がある場合があります。これが私のハブとクライアント側のjavascriptのコードです
クライアント側の JavaScript と HTML
<script type="text/javascript">
//start signalr
var message = $.connection.messageHub;
// Declare a function on the message hub so the server can invoke it
message.client.send = function (message) {
alert(message);
}
// Start the connection and join groups
$.connection.hub.start();
//bind click event of button to invoke send function on server
$(document).ready(function () {
$("#target").click(function () {
message.server.send("Hello from signalr");
});
});
</script>
<button id="target">Click to send message to other clients</button>
サーバー側ハブ
public class MessageHub: Hub
{
public Task AddGroups()
{
//add 1st group
Groups.Add(Context.ConnectionId, "foo");
//add 2nd group
return Groups.Add(Context.ConnectionId, "foobar");
}
//this method will be called from the client
public void Send(string message)
{
Clients.OthersInGroup("foobar").send(message);
}
//automatically join groups when client first connects
public override Task OnConnected()
{
return AddGroups();
}
//rejoin groups if client disconnects and then reconnects
public override Task OnReconnected()
{
return AddGroups();
}
}
上記のコードは、最初の接続時に各クライアントに 2 つのグループを追加する必要がありますが、機能しません。デバッガーを使用して C# コードをステップ実行しましたが、エラーはスローされません。また、Chrome のコンソールを使用しても JavaScript エラーは表示されませんが、クライアントで Send 関数が呼び出されていません。次に、以下に示すように AddGroups() メソッドを変更して、グループを 1 つだけ追加しました。
public Task AddGroups()
{
//dont add first group
//Groups.Add(Context.ConnectionId, "foo");
//add only second group
return Groups.Add(Context.ConnectionId, "foobar");
}
これで、私のアプリケーションは完全に機能します。2 番目のグループを追加するにはどうすればよいですか? 複数のグループに参加することを誤解しているようです。誰かがそれを行う正しい方法を教えてもらえますか?