最简单的样本连接自主信号服务器和客户端?

时间:2012-04-27 13:00:37

标签: c# signalr

我正在尝试将客户端连接到自托管的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.dll中出现'System.AggregateException'类型的第一次机会异常 Task抛出的SignalR异常:System.AggregateException:发生一个或多个错误。 ---&GT; System.ObjectDisposedException:无法访问已处置的对象。 对象名称:'System.Net.HttpListenerResponse'。    在System.Net.HttpListenerResponse.CheckDisposed()    在System.Net.HttpListenerResponse.get_OutputStream()    在SignalR.Hosting.Self.Infrastructure.ResponseExtensions。&lt;&gt; c_ DisplayClass4.b _1(IAsyncResult ar)    在System.Threading.Tasks.TaskFactory.FromAsyncCoreLogic(IAsyncResult iar,Action 1 endMethod, TaskCompletionSource 1 tcs)    ---内部异常堆栈跟踪结束--- ---&GT; (内部异常#0)System.ObjectDisposedException:无法访问已处置的对象。 对象名称:'System.Net.HttpListenerResponse'。    在System.Net.HttpListenerResponse.CheckDisposed()    在System.Net.HttpListenerResponse.get_OutputStream()    在SignalR.Hosting.Self.Infrastructure.ResponseExtensions。&lt;&gt; c_ DisplayClass4.b _1(IAsyncResult ar)    在System.Threading.Tasks.TaskFactory.FromAsyncCoreLogic(IAsyncResult iar,Action 1 endMethod, TaskCompletionSource 1 tcs)&lt; ---

'client.vshost.exe'(托管(v4.0.30319)):已加载'C:\ Windows \ assembly \ GAC_MSIL \ Microsoft.VisualStudio.DebuggerVisualizers \ 10.0.0.0__b03f5f7f11d50a3a \ Microsoft.VisualStudio.DebuggerVisualizers.dll'< / p>

1 个答案:

答案 0 :(得分:0)

看起来它正在处理服务器变量,因为它没有看到它稍后在函数中使用。将GC.KeepAlive(服务器)添加到Main函数的末尾,以确保它不会被提前处理掉。或者更好,但它在使用声明中。