私はasp.netクラシックウェブサイトを持っています。 iveはSignalRの基本機能を機能させました(1つのクライアントが残りのクライアントにメッセージを送信します)。しかし今、私は特定のconnectionsIDにのみメッセージを送信したいと思います。
私のハブ:
** [HubName("chatHub")]
public class ChatHub : Hub
{
public static List<string> messages = new List<string>();
public void GetServiceState()
{
Clients.updateMessages(messages);
}
public void UpdateServiceState()
{
messages.Add(DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss"));
Clients.updateMessages(messages);
}
}**
Aspコード:
<script type="text/javascript">
$(function () {
// creates a proxy to the health check hub
var healthCheckHub = $.connection.chatHub;
console.log($.connection.hub)
// handles the callback sent from the server
healthCheckHub.updateMessages = function (data) {
$("li").remove();
$.each(data, function () {
$('#messages').append('<li>' + this + '</li>');
console.log($.connection);
});
};
$("#trigger").click(function () {
healthCheckHub.updateServiceState();
});
// Start the connection and request current state
$.connection.hub.start(function () {
healthCheckHub.getServiceState();
});
});
問題は、Clients.updateMessages(messages);なので、ハブを使用して特定のConnectionIDに送信する方法がわからないことです。それらすべてにメッセージを送信します。どうすればこれを解決できますか?
追伸:iveはすでに調べました: Signall/PersistentConnectionを使用して接続されたクライアントにサーバーメッセージを送信します
および http://riba-escapades.blogspot.dk/2012/05/signalr-send-messages-to-single-client.html
それはうまくいきませんでした。
そうですね、次のようにハブから単一のクライアントにメッセージを送信できます。
Clients.Client(someConnectionIdIWantToSendToSpecifically).doSomething();
秘訣は、メッセージの送信先の接続IDを知っている必要があることです。さらに具体的には、メッセージを送信する対象の論理IDも知りたいと思うでしょう。その論理IDには複数の接続があるか、完全に異なる接続IDでドロップして再接続されている可能性があるためです。論理IDへの接続のマッピングは、SignalRがアプリケーション自体に任せるものです。