如何使用 C# 和 ASP.Net Core 2.2 连接和收听外部 websocket url

Posted

技术标签:

【中文标题】如何使用 C# 和 ASP.Net Core 2.2 连接和收听外部 websocket url【英文标题】:How to connect and listen to external websocket url using C# and ASP.Net Core 2.2 【发布时间】:2019-04-08 10:47:06 【问题描述】:

我正在尝试创建一个使用 C# 和 ASP.Net Core 2.2 侦听 WebSocket URL 的机器人。

但我是 WebSocket 领域的新手。

我阅读了有关 WebSocket 和 ClientWebSocket 的 Microsoft 文档来解决我的问题。但对我没有帮助。

我的应用如何监听外部 WebSocket URL 并对传入的消息做出反应?

我尝试了下面的代码,但得到“无法创建抽象类或接口 'WebSocket' 的实例。”错误。

using (var ws = new WebSocket("wss://ws.example.com"))

    ws.OnMessage += (sender, e) =>
        Console.WriteLine("Message received" + e.Data);
    ws.OnError += (sender, e) =>
        Console.WriteLine("Error: " + e.Message);
    ws.Connect();
        Console.ReadKey(true);

【问题讨论】:

您尝试了什么,什么没有奏效?您需要更具体地提出您的问题,因为这不是免费将代码编写外包给互联网的地方 您是否正在尝试获取 xml 数据之类的流式消息? @jdweng 不,像json数据 @DenisSchaf 我告诉了我是 websocket 领域的新手,我尝试的所有代码都没有帮助。 WebSocket是一个抽象类,可以使用ClientWebSocket`。 【参考方案1】:

这应该在基本情况下这样做。

 public class Listener
    
        public void StopListening()
        
            this.src.Cancel();
        
        private Task listenTask;
        private CancellationTokenSource src=new CancellationTokenSource();
        public Task Listen(string url)
        

           listenTask = Task.Run(async () =>
            
                try
                
                    byte[] buffer = new byte[1024];
                    await socket.ConnectAsync(new Uri(url), CancellationToken.None);
                    while (true)
                    
                        WebSocketReceiveResult result = await socket.ReceiveAsync(buffer, CancellationToken.None);
                        string data = Encoding.UTF8.GetString(buffer, 0, result.Count);
                        Console.WriteLine(data);
                    
                
                catch (Exception ex)
                
                    //treat exception
                
            ,src.Token);
        
    

但是,如果您打算创建多个 Listener 对象(在 HttpController 的上下文中,在路线上打开 sockets ),那么情况就会改变。

【讨论】:

以上是关于如何使用 C# 和 ASP.Net Core 2.2 连接和收听外部 websocket url的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 ASP.NET Core 同时制作 Razor Page 和 C# 代码框架?

如何在 C# 页面 ASP.NET Core MVC 上使用 SignInManager 和 Usermanager

如何使用 DataAnnotations & Regex - c# - ASP.NET Core

如何使用 C# 在 ASP.NET Core 3.1 MVC 中使用会话变量

如何在 Asp.NET Core WEB API 中使用 .Net (C#) 在 Payload 中创建具有自定义 JSON 声明的 JWT 令牌

如何使用 MongoDB 将动态 JSON 属性发布到 C# ASP.Net Core Web API?