2012-04-27 68 views
1

我试图将客户端连接到自托管的SignalR服务器。最简单的可能样本连接selfhosted signalR-server和客户端?

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

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:类型System.AggregateException“的第一次机会异常发生的mscorlib .dll TaskR引发的SignalR异常:System.AggregateException:发生了一个或多个错误。 ---> System.ObjectDisposedException:无法访问处置的对象。 对象名称:'System.Net.HttpListenerResponse'。 at System.Net.HttpListenerResponse.CheckDisposed() at System.Net.HttpListenerResponse.get_OutputStream() at SignalR.Hosting.Self.Infrastructure.ResponseExtensions。 <> C_ DisplayClass4.b _1(IAsyncResult的AR) 在System.Threading.Tasks.TaskFactory.FromAsyncCoreLogic(IAsyncResult的IAR,动作1 endMethod, TaskCompletionSource 1 TCS) ---内部异常堆栈跟踪的结尾--- --- >(内部异常#0)System.ObjectDisposedException:无法访问处置的对象。 对象名称:'System.Net.HttpListenerResponse'。 at System.Net.HttpListenerResponse.CheckDisposed() at System.Net.HttpListenerResponse.get_OutputStream() at SignalR.Hosting.Self.Infrastructure.ResponseExtensions。 <> C_ DisplayClass4.b _1(IAsyncResult的AR) 在System.Threading.Tasks.TaskFactory.FromAsyncCoreLogic(IAsyncResult的IAR,动作1 endMethod, TaskCompletionSource 1 TCS)< ---

'client.vshost.exe'(管理(v4.0.30319)):已加载 'C:\ WINDOWS \装配\ GAC_MSIL \ Microsoft.VisualStudio.DebuggerVisualizers \ 10.0.0.0__b03f5f7f11d50a3a \ Microsoft.VisualStudio.DebuggerVisualizers.dll'

+0

你有没有得到任何决议?我正在经历完全相同的事情。 – Etch 2012-05-03 13:38:16

+0

不,但在安装vs11并运行在debugmode之后,上面的代码运行..... – 2012-05-04 20:55:05

回答

0

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

+0

我很确定这是不对的。这个示例代码应该工作得很好。但它什么都不做。我会建议调试以找出实际的500。 – davidfowl 2012-04-28 09:24:15

+0

我没有安装VS11,所以我无法调试该项目,但我添加了在服务器端获得的错误日志。 – 2012-05-02 08:59:01

+0

我已经安装了VS11,现在克隆了SignalR存储库。如果我在调试模式和VS11中运行相同的代码...它的工作原理! – 2012-05-04 03:01:02