20

我是使用 SignalR 的新手(从今天开始),向所有连接的客户端发送消息非常简单,但现在我只想发送给一个组。我找不到有关如何在客户端加入的简单文档。如果有人可以提供帮助,我怎么能简单地加入 javascript 方面的组。谢谢你的帮助。

public class EventHub : Hub
{
    public void SendNewMedia(MediaInfoViewModel model,Guid eventId)
    {
        Clients.Group(eventId.ToString()).setupmedia(model);
    }
}
//Controller that is sending client new data
var eventHub = GlobalHost.ConnectionManager.GetHubContext<EventHub>();
              var result = eventHub.Clients.Group(eventId.ToString()).setupmedia(eventViewer);

//Finally the javascript. Not sure how to setup just for a group
$(function () {
    var event = $.connection.eventHub;
    event.client.setupmedia = function (newMedia) {

        $('#photolist').prepend('<li><img src="' + newMedia.MediaUrl + '" class="img-polaroid span2"/></li>');
    };
    $.connection.hub.start(function() {
        event.server.create(eventID);//I know this is wrong but not sure how to connect
    }).done(function () {
        alert('conntected. Ready to retrieve data!');
    });
});
4

3 回答 3

41

你不能。如果您可以从 javascript 加入一个组,那么任何人都可以使用您的代码加入任何破坏安全性的组。如果您确实需要这样做 - 在服务器端创建一个方法,该方法将组名作为参数并将客户端添加到组中。

public void JoinGroup(string groupName)
{
    this.Groups.Add(this.Context.ConnectionId, groupName);
}

之后,像这样从 JS 调用它

eventHub.server.joinGroup("my-awsm-group");
于 2013-06-26T00:44:31.350 回答
5

-------------------------在 Javascript (ReactJs) 中-------- -------------

const connection = new signalR.HubConnectionBuilder()
  .withUrl("connectionUrl")
  .build();
connection.start().then(res => {
    connection.invoke("JoinGroup", "groupName")  //JoinGroup is C# method name
        .catch(err => {
            console.log(err);
        });
}).catch(err => {
            console.log(err);
        });;

----------------在 C# (.Net Core) 中-----------------

public class NotificationHub : Hub
    {
        public Task JoinGroup(string groupName)
        {
                return Groups.AddToGroupAsync(Context.ConnectionId, groupName);
        }
    } 
于 2020-11-20T16:25:00.133 回答
2

以防您现在遇到这个问题(就像我一样),这里有一个示例,说明如何实现一个 azure 函数来支持组。

https://docs.microsoft.com/en-us/azure/azure-functions/functions-bindings-signalr-service#2x-c-group-management-output-examples

于 2019-10-23T15:44:14.293 回答