首頁 >後端開發 >C++ >如何使用伺服器和客戶端建立簡單的 SignalR 控制台應用程式?

如何使用伺服器和客戶端建立簡單的 SignalR 控制台應用程式?

DDD
DDD原創
2025-01-05 03:54:42779瀏覽

How to Build a Simple SignalR Console Application with a Server and Client?

SignalR 控制台應用程式範例

在本文中,我們將探索使用SignalR 與.NET 通訊的控制台應用程式範例集線器。

SignalR設定

在繼續之前,請確保透過NuGet 在伺服器和客戶端應用程式中安裝以下SignalR 套件:

  • 伺服器:SignalR.Host.Self(版本0.5.5) 2)
  • 客戶: Microsoft.AspNet.SignalR.Client

服務器實現

使用以下代碼創建控制台應用服務器:
using System;
using SignalR.Hubs;

namespace SignalR.Hosting.Self.Samples
{
    class Program
    {
        static void Main(string[] args)
        {
            string url = "http://127.0.0.1:8088/";
            var server = new Server(url);

            server.MapHubs();

            server.Start();

            Console.WriteLine("Server running on {0}", url);

            while (true)
            {
                ConsoleKeyInfo ki = Console.ReadKey(true);
                if (ki.Key == ConsoleKey.X)
                {
                    break;
                }
            }
        }

        [HubName("CustomHub")]
        public class MyHub : Hub
        {
            public string Send(string message)
            {
                return message;
            }

            public void DoSomething(string param)
            {
                Clients.addMessage(param);
            }
        }
    }
}

客戶端實作

在單獨的控制台應用程式中客戶端:
using System;
using SignalR.Client.Hubs;

namespace SignalRConsoleApp
{
    internal class Program
    {
        private static void Main(string[] args)
        {
            var connection = new HubConnection("http://127.0.0.1:8088/");

            var myHub = connection.CreateHubProxy("CustomHub");

            connection.Start().ContinueWith(task =>
            {
                if (task.IsFaulted)
                {
                    Console.WriteLine("Error opening connection: {0}", task.Exception.GetBaseException());
                }
                else
                {
                    Console.WriteLine("Connected");
                }

            }).Wait();

            myHub.Invoke<string>("Send", "HELLO World ").ContinueWith(task =>
            {
                if (task.IsFaulted)
                {
                    Console.WriteLine("Error calling Send: {0}", task.Exception.GetBaseException());
                }
                else
                {
                    Console.WriteLine(task.Result);
                }
            });

            myHub.On<string>("addMessage", param => { Console.WriteLine(param); });

            myHub.Invoke<string>("DoSomething", "I'm doing something!!!").Wait();

            Console.Read();
            connection.Stop();
        }
    }
}

問題與解決方案

分配中心名稱

如果您遇到特定中心的問題伺服器端程式碼中的名稱(「test」)(例如,[HubName(“test”)]),請確保它與客戶端程式碼中的HubName 屬性不衝突。伺服器和客戶端中使用的集線器名稱必須相符才能正確通訊。

以上是如何使用伺服器和客戶端建立簡單的 SignalR 控制台應用程式?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn