C# 如何连接WebSocket服务

提问

C# 如何连接WebSocket服务

回答

  1. 引入nuget WebSocketSharp
  2. 连接服务
using ActiveAlarmDemo.Models;
using Microsoft.Extensions.Hosting;
using Newtonsoft.Json;
using WebSocketSharp;

namespace ActiveAlarmDemo.Services
{
    internal class RecordSubPlanService : BackgroundService
    {
        private readonly swaggerClient _swaggerClient;
        private readonly ActiveAlarmContext _activeAlarmContext;
        public RecordSubPlanService(swaggerClient swaggerClient, ActiveAlarmContext activeAlarmContext)
        {
            _swaggerClient = swaggerClient;
            _activeAlarmContext = activeAlarmContext;
        }
        protected override async Task ExecuteAsync(CancellationToken stoppingToken)
        {
            await Task.Delay(10000);
            Console.WriteLine("RecordSubPlanService");
            var authentication = await _swaggerClient.AuthenticationAsync("client_credentials", "HLT2", "HLT2");
            var eventid = await _swaggerClient.RequestEventSubscriptionAsync(authentication.Access_token, new EventSubscriptionRequest()
            {
                Equips = new List<string>() { "PLSDCluster.High_Voltage.Generators.GEN4" }
            });
            WebSocketSharp.WebSocket webSocket = new($@"ws://172.26.176.171:18100/subscriptions/events/{eventid.Id}"); // in this string, we will type URL of server we want to connect to
            webSocket.OnMessage += OnWebSocketOnOnMessage!;

            webSocket.Connect();//connection to server

            Console.ReadLine();
        }

        public Task StopAsync(CancellationToken cancellationToken)
        {
            throw new NotImplementedException();
        }

        async void OnWebSocketOnOnMessage(object viewer, MessageEventArgs a)
        {
            //await Task.Run(async () =>
            //{
            var result = JsonConvert.DeserializeObject<List<SoeQueryAlarm>>(a.Data);
            if (result != null)
            {
                await _activeAlarmContext.SoeQueryAlarms.AddRangeAsync(result);
                var c = await _activeAlarmContext.SaveChangesAsync();
                Console.WriteLine("RecordSubPlanService..." + c.ToString());
            }

            //});

        }
    }
}

posted @ 2022-12-28 15:15  东百牧码人  阅读(776)  评论(0)    收藏  举报