1

クライアントをセルフホステッド 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: タイプ 'System.AggregateException' の最初の例外が mscorlib.dll で発生しましたタスクによってスローされた SignalR 例外: System.AggregateException: 1 つ以上のエラーが発生しました。---> System.ObjectDisposedException: 破棄されたオブジェクトにアクセスできません。オブジェクト名: 'System.Net.HttpListenerResponse'。System.Net.HttpListenerResponse.CheckDisposed() で System.Net.HttpListenerResponse.get_OutputStream() で SignalR.Hosting.Self.Infrastructure.ResponseExtensions.<>c_ DisplayClass4.b _1 (IAsyncResult ar) で System.Threading.Tasks.TaskFactory で.FromAsyncCoreLogic(IAsyncResult iar, アクション1 endMethod, TaskCompletionSource1 tcs) --- 内部例外スタック トレースの終了 --- ---> (内部例外 #0) System.ObjectDisposedException: 破棄されたオブジェクトにアクセスできません。オブジェクト名: 'System.Net.HttpListenerResponse'。System.Net.HttpListenerResponse.CheckDisposed() で System.Net.HttpListenerResponse.get_OutputStream() で SignalR.Hosting.Self.Infrastructure.ResponseExtensions.<>c_ DisplayClass4.b _1 (IAsyncResult ar) で System.Threading.Tasks.TaskFactory で.FromAsyncCoreLogic(IAsyncResult iar, アクション1 endMethod, TaskCompletionSource1 tcs)<---

'client.vshost.exe' (マネージド (v4.0.30319)): ロードされた 'C:\Windows\assembly\GAC_MSIL\Microsoft.VisualStudio.DebuggerVisualizers\10.0.0.0__b03f5f7f11d50a3a\Microsoft.VisualStudio.DebuggerVisualizers.dll'

4

1 に答える 1

0

サーバー変数が後で関数で使用されているのがわからないため、サーバー変数を破棄しているように見えます。Main 関数の最後に GC.KeepAlive( server ) を追加して、早期に破棄されないようにします。または、さらに良いことに、それは using ステートメントにあります。

于 2012-04-27T13:12:29.420 に答える