c# - SignalR 2.0 .NET 控制台客户端

标签 c# asp.net .net signalr signalr.client

我有我的服务器控制台应用程序:

    static void Main(string[] args)
    {
        string url = "http://localhost:8080";
        using (WebApp.Start(url))
        {
            MyHub hub = new MyHub();
            Console.WriteLine("Server running on {0}", url);
            var key = Console.ReadLine();
            while (key != "quit")
            {
                hub.Send("Server", key);
            }
        }
    }

public class MyHub : Hub
{
    public void Send(string name, string message)
    {
        var context = GlobalHost.ConnectionManager.GetHubContext<MyHub>();
        context.Clients.All.addMessage(name, message);
    }
}
public class Startup
{
    public void Configuration(IAppBuilder app)
    {
        app.UseCors(CorsOptions.AllowAll);
        app.MapSignalR();
    }
}

还有我的 .NET 客户端应用

    static void Main(string[] args)
    {

        MainAsync().Wait();
        Console.ReadLine();
    }

    static async Task MainAsync()
    {
        try
        {

            var hubConnection = new HubConnection("http://localhost:8080/");
            //hubConnection.TraceLevel = TraceLevels.All;
            //hubConnection.TraceWriter = Console.Out;
            IHubProxy hubProxy = hubConnection.CreateHubProxy("MyHub");
            hubProxy.On("addMessage", data =>
                {
                    Console.WriteLine("Incoming data: {0} {1}", data.name, data.message);
                });
            ServicePointManager.DefaultConnectionLimit = 10;
            await hubConnection.Start();

        }
        catch (Exception ex)
        {

        }
    }

运行客户端时我没有收到任何错误。但是,控制台上没有打印任何内容。

当我取消注释这两行时:

hubConnection.TraceLevel = TraceLevels.All;
hubConnection.TraceWriter = Console.Out;

我能够在控制台中看到一些跟踪输出

07:56:28.0121460 - 355ca933-de49-400b-b859-c9dde6361151 - WS: OnMessage({"C":"d-
69A14839-B,0|C,0|D,1|E,0","S":1,"M":[]})
07:56:28.0277722 - 355ca933-de49-400b-b859-c9dde6361151 - ChangeState(Connecting
, Connected)
07:56:33.4655493 - 355ca933-de49-400b-b859-c9dde6361151 - WS: OnMessage({"C":"d-
69A14839-B,1|C,0|D,1|E,0","M":[{"H":"MyHub","M":"addMessage","A":["Server","Hello World"]}]}
)
07:56:37.9657773 - 355ca933-de49-400b-b859-c9dde6361151 - WS: OnMessage({})
 07:56:47.9975354 - 355ca933-de49-400b-b859-c9dde6361151 - WS: OnMessage({})

“Server”和“Hello World”是从服务器发送的消息,所以我猜客户端正在接收消息,只是我可能以错误的方式将它们打印到控制台

有人能帮忙吗?

附加信息:我能够在我的 MVC 应用程序上正常接收消息。

最佳答案

您不应该这样声明您的 hubProxy 事件处理程序吗?

hubProxy.On<string, string>("Send", (name, message) => 
{
   Console.WriteLine("Incoming data: {0} {1}", name, message);
});

关于c# - SignalR 2.0 .NET 控制台客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22141485/

相关文章:

c# - 为什么等待这个错误任务不抛出异常?

c# - 查找类似图像

c# - Nuget包...项目中不存在...包...已存在于文件夹中

.net - 在 IIS 上部署 .NET MVC 4 应用程序时,物理路径应指向何处

c# - 如何确保我的 HttpClient 在 C# 中只初始化一次?

c# - 将 Azure 网站连接到 Xero 合作伙伴应用程序

asp.net - MVC 自定义成员资格和角色提供者上下文生命周期问题

c# - 如何将一维数组转换为多维数组? (C#)

c# - 替代 Thread.Sleep?在 C# 中

c# - 尽管隐式 null 检查,ReSharper 仍对可能的 System.NullReferenceException 发出警告