连接自托管 signalR 服务器和客户端的最简单示例

本文关键字:客户端 最简单 服务器 signalR 连接 | 更新日期: 2023-09-27 18:32:23

我正在尝试将客户端连接到自托管的 SignalR 服务器。

我的服务器看起来像这样:

    static void Main(string[] args)
    {
        string url = "http://localhost:8081/";
        var server = new Server(url);
        server.MapConnection<MyConnection>("/echo");
        server.Start();
        Console.WriteLine("Server running on {0}", url);
        Console.ReadKey();
    }
    public class MyConnection : PersistentConnection
    {
    }

这是我能想到的最简单的。客户端看起来像这样:

    static void Main(string[] args)
    {
        SignalR.Client.Connection conn = new SignalR.Client.Connection("http://localhost:8081/echo");
        Task start = conn.Start();
        start.Wait();
        if (start.Status == TaskStatus.RanToCompletion)
        {
            Console.WriteLine("Connected");
        }
        Console.ReadKey();
    }

我无法让上面的代码工作。服务器启动,但是当我运行客户端代码进行连接时,出现错误:

远程服务器返回错误: (500) 内部服务器错误。

服务器还给了我一个错误:无法访问已释放的对象。

我忘了什么吗?我做错了什么?

编辑:我在服务器上得到的错误如下。

SignalRtest.vshost.exe错误:0:mscorlib 中发生了类型为"System.AggregateException"的第一次机会异常.dll任务引发的 SignalR 异常:系统。聚合异常:发生一个或多个错误。---> System.ObjectDisposedException:无法访问已释放的对象。对象名称:"System.Net.HttpListenerResponse"。 at System.Net.HttpListenerResponse.CheckDisposed() 在 System.Net.HttpListenerResponse.get_OutputStream() at SignalR.Hosting.Self.Infrastructure.ResponseExtensions.<>c_DisplayClass4.b_1(IAsyncResult ar) at System.Threading.Tasks.TaskFactory.FromAsyncCoreLogic(IAsyncResult iar, Action 1 endMethod, TaskCompletionSource 1 tcs) ---内部异常堆栈跟踪结束------>(内部异常 #0)System.ObjectDisposedException:无法访问已释放的对象。对象名称:"System.Net.HttpListenerResponse"。 at System.Net.HttpListenerResponse.CheckDisposed() 在 System.Net.HttpListenerResponse.get_OutputStream() at SignalR.Hosting.Self.Infrastructure.ResponseExtensions.<>c_DisplayClass4.b_1(IAsyncResult ar) at System.Threading.Tasks.TaskFactory.FromAsyncCoreLogic(IAsyncResult iar, Action 1 endMethod, TaskCompletionSource 1 tcs)<---

'client.vshost.exe' (Managed (v4.0.30319)): 已加载 'C:''Windows''assembly''GAC_MSIL''Microsoft.VisualStudio.DebuggerVisualizers''10.0.0.0__b03f5f7f11d50a3a''Microsoft.VisualStudio.DebuggerVisualizers.dll'

连接自托管 signalR 服务器和客户端的最简单示例

看起来它正在释放服务器变量,因为它没有看到它稍后在函数中使用。添加 GC。KeepAlive(服务器)到主函数的末尾,以确保它不会过早被处理掉。或者更好的是,但它在 using 语句中。