SignalR - 将客户端的响应传回服务器

时间:2016-05-05 15:02:04

标签: signalr

我从服务器调用客户端方法,本质上是一个Javascript确认对话框。如果客户端点击对话框中的Cancel按钮,我想从本地存储中删除其令牌(基本上将其记录下来)......

sessionStorage.removeItem('access-token');

如果客户端点击OK按钮,我想在不同的客户端上执行相同操作(我将此客户端的connectionId存储在服务器端)。所以我需要一种方法让服务器知道客户选择哪个选项(OKCancel)。

我如何选择客户端并将其传回服务器,以便服务器可以在适当的客户端上调用“Logout”Javascript?

1 个答案:

答案 0 :(得分:1)

我认为你有几个选择。

用户点击按钮后,您可以将信息发回Hub

<强>集线器

[HubName("message")]
public class MessageHub : Hub
{
    public void sendmessage(bool logout)
    {
        Clients.Caller(????).logoutuser(logout); //However you identify who to logout??
    }
}

<强>客户端

var hub = $.connection.message;

hub.client.logoutuser = function(message) {
    if (message.logout = true) {
        sessionStorage.removeItem('access-token');
    }
}

hub.server.sendmessage(true); //result of the user's click OK -> True, Cancel -> False

$.connection.hub.start().done(function () { });

或者您可以点击一个API来获取您想要注销的某些<?em>用户的连接。

<强> API

[RoutePrefix("api/messaging")]
public class MessagingController : ApiController
{
    [Route("")]
    public void Post(Message message)
    {
        var notificationHub = GlobalHost.ConnectionManager.GetHubContext<MessageHub>();
        if (notificationHub != null)
        {
            try
            { 
                notificationHub.Clients.User(message.UserName).logoutuser(message);
            }
            catch (Exception ex)
            {
            }
        }
    }
}

<强>客户端

function notifyController(responseObj) {

$.ajax({
        url: '/api/Messaging/',
        type: 'POST',
        data: responseObj, // some object containing the users response information?
        success: function (data) { return; },
        error: function (ex) { return; }
    });
}