c# - SignalR .Net 客户端 : How do I send a message to a Group?

标签 c# asp.net signalr

我正在使用 SignalR Wiki 入门中心页面中的示例聊天应用程序。我已经扩展它以添加组支持并且它工作正常。

但是,现在我想从外部控制台应用程序向群组发送消息。这是我的控制台应用程序代码,下面是我的群组代码。如何从代理向群组发送消息?可能吗?

// Console App
using System;
using Microsoft.AspNet.SignalR.Client.Hubs;

namespace SignalrNetClient
{
    class Program
    {
        static void Main(string[] args)
        {
            // Connect to the service
            var connection = new HubConnection("http://localhost:50116");
            var chatHub = connection.CreateHubProxy("Chat");

            // Print the message when it comes in
            connection.Received += data => Console.WriteLine(data);

            // Start the connection
            connection.Start().Wait();

            chatHub.Invoke("Send", "Hey there!");

            string line = null;
            while ((line = Console.ReadLine()) != null)
            {
                // Send a message to the server
                connection.Send(line).Wait();
            }
        }
    }
}

SignalR Web 应用程序宿主:

namespace SignalrServer.Hubs
{
    public class Chat : Hub
    {
        public void Send(string message)
        {
            // Call the addMessage method on all clients            
            Clients.All.addMessage(message);
            Clients.Group("RoomA").addMessage("Group Message " + message);
        }

        //server
        public void Join(string groupName)
        {
            Groups.Add(Context.ConnectionId, groupName);
        }
    }
}

Default.aspx

<script src="http://code.jquery.com/jquery-1.8.2.min.js" type="text/javascript"></script>
<script src="Scripts/jquery.signalR-1.0.1.min.js" type="text/javascript"></script>
<!--  If this is an MVC project then use the following -->
<!--  <script src="~/signalr/hubs" type="text/javascript"></script> -->
<script src="signalr/hubs" type="text/javascript"></script>
<script type="text/javascript">
    $(function () {
        // Proxy created on the fly          
        var chat = $.connection.chat;

        // Declare a function on the chat hub so the server can invoke it          
        chat.client.addMessage = function (message) {
            $('#messages').append('<li>' + message + '</li>');
        };

        $.connection.hub.start(function () {
            chat.server.join("RoomA");
        });

        // Start the connection
        $.connection.hub.start().done(function () {

            $("#broadcast").click(function () {
                // Call the chat method on the server
                chat.server.send($('#msg').val());
            });
        });
    });
</script>

  <div>
    <input type="text" id="msg" />
<input type="button" id="broadcast" value="broadcast" />

<ul id="messages">
</ul>
  </div>

最佳答案

我对类似的事情所做的是创建一个接受您选择的对象的方法,例如

你的新类(class)

public class MyMessage{
    public string Msg { get; set; }
    public string Group { get; set; }
}

然后在 Hub 中创建一个方法来接受这个对象。

public void Send(MyMessage message)
{
    // Call the addMessage method on all clients            
    Clients.All.addMessage(message.Msg);
    Clients.Group(message.Group).addMessage("Group Message " + message.Msg);
}

然后从您的客户端,您可以将这个对象传入。

chatHub.Invoke<MyMessage>("send", new MyMessage() { Msg = "Hello World", Group = "RoomA" });

然后您也可以从 JS 客户端调用它

chat.server.send({ Msg: "Hello World", Group: "RoomA" });

关于c# - SignalR .Net 客户端 : How do I send a message to a Group?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16167735/

相关文章:

C# 从一个范围级别向下修改字符串数组

c# - .Net 应用程序中未将安全标志设置为 Cookie

c# - 如何缓存处理程序图像?

javascript - 没有在tinyMCE编辑器中获得更新的测试

redis - 使用 SignalR 和 Redis 的组

c# - 如何将 SignalR 与 Xamarin 结合使用

c# - 使用正则表达式分割

c# - 将 C# Double 格式化为科学记数法的三倍数

asp.net - Autofac DependencyResolutionException for ILifetimeScope for a hub in asp.net mvc, signalr, MS owin

c# - 存储父子关系