2

コンソールクライアントアプリをコンソールサーバーアプリに接続しようとして、かなり長い間苦労してきました。これまでのところ、「接続を開くときにエラーが発生しました..」という500を取得しています。サーバーに到達するかどうかさえわかりません。サーバーがリッスンしているように見えますが、なぜそれが起こるのか分かりますか?

サーバ

私のハブ:

[HubName("server")]
public class HubImpl : Hub
{
    public string Hello()
    {
        return "Hello there!";
    }
}

私の WebApplication ラッパー:

public class HubServer : IServer
{

    private IDisposable _server;
    private ServerConfiguration _configuration;

    static HubServer()
    {
        RouteTables.Initialize();
    }
    public static IServer Create(ServerConfiguration conf = null)
    {
        return new HubServer(conf);
    }
    internal HubServer(ServerConfiguration conf)
    {
        ApplyConfiguration(conf);
    }

    private void ApplyConfiguration(ServerConfiguration conf)
    {
        _configuration = conf ?? new ServerConfiguration();

    }
    public void Dispose()
    {
        Stop();
    }

    public void Start()
    {
        var url = string.Concat("http://", _configuration.Host, ":", _configuration.Port, "/");
        var options = new StartOptions
        {
            Url = url,
            App = GetType().AssemblyQualifiedName
        };
        _server = WebApplication.Start<Startup>(options);

        Console.WriteLine("Server running on {0}", url);
    }

    public void Stop()
    {
        _server.Dispose();
    }
}

クライアント

私の HubConnection ラッパー:

public class Client : IClient
{
    private readonly ClientConfiguration _configuration;
    private readonly HubConnection _connection;
    private IHubProxy _hubProxy;
    public Client(ClientConfiguration conf = null)
    {
        _configuration = conf ?? new ClientConfiguration();

        // open web socket to the server
        //Set connection
        var url = string.Concat("http://", _configuration.Host, ":", _configuration.Port, "/");
        _connection = new HubConnection(url);
        Console.WriteLine("Connecting to " + url);

        //Make proxy to hub based on hub name on server
        _hubProxy = _connection.CreateHubProxy("server");

        _connection.StateChanged += change => Console.WriteLine(change.OldState + " => " + change.NewState);

        //Start connection
        var connectionTask = TryConnecting();
        connectionTask.Wait();
        int retries = 0;
        const int maxRetries = 10;
        while (!connectionTask.Result)
        {
            Thread.Sleep(500);
            connectionTask = TryConnecting();
            connectionTask.Wait();

            retries++;
            if (retries == maxRetries) break;
        }

    }

    private Task<bool> TryConnecting()
    {
        return _connection.Start().ContinueWith(task =>
        {
            if (task.IsFaulted)
            {
                Console.WriteLine("There was an error opening the connection:{0}",
                                  task.Exception.GetBaseException());
                return false;
            }
            else
            {
                Console.WriteLine("Connected");
                return true;
            }


        });
    }
}
4

0 に答える 0