2012-04-27 32 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