1

thisおよびthisまたはthisのチュートリアルに従って、.netコアでWebSocket Webアプリケーションをビルドしました。今、私はMicrosoft.AspNetCore.TestHostClientWebSocket .netコアを使用してTestHost.WebScoketClientをテストする

私は

public static WebSocketClient StartWebSocketServer(string url) 
{ 
    var baseAddress = $"http://{url}"; 
    var builder = 
     WebHost.CreateDefaultBuilder(new string[]{}) 
      .UseEnvironment("Development") 
      .ConfigureLogging((ctx, logging) => logging.AddConsole()) 
      .UseUrls(baseAddress) 
      .UseStartup<SocketsTestStartup>(); 

    var server = new TestServer(builder); 
    return server.CreateWebSocketClient(); 
} 

とのWebSocketクライアントの作成が

下のコードで行われているのWebSocketを作成する方法を使用して、この上でいくつかの 統合テストを記述しようとしています

local

ClientWebSocket testAppClient = new ClientWebSocket(); 
await 
    testAppClient 
    .ConnectAsync(
     new Uri("ws://loclahost:52015/local"), 
     CancellationToken.None); 
はWebSocketのサーバー上のパス名です

Startup.cs

app.MapWebSocketManager(
    "/local", 
    serviceProvider.GetService<LocalServiceSocketHandler>()); 

とにかく、接続は次のエラーを生成

System.Net.WebSockets.WebSocketException : Unable to connect to the remote server 

私の質問は、私はTestHost.WebSocketClientに接続するためにClientWebSocketを頼むことができる方法ですか?

答えて

1

代わりTESTSERVERの、私はWebSocketのウェブアプリケーションを実行するには、次のコードを使用

public static IWebHost CreateServer(int port) 
{ 
    var configBuilder = new ConfigurationBuilder(); 
    configBuilder.AddInMemoryCollection(); 
    var config = configBuilder.Build(); 
    config["server.urls"] = $"http://localhost:{port}"; 

    var host = new WebHostBuilder() 
     .ConfigureLogging((ctx, logging) => logging.AddDebug()) 
     .UseConfiguration(config) 
     .UseKestrel() 
     .UseStartup<SocketsTestStartup>() 
     .Build(); 

    host.Start(); 

    return host; 
} 

基本的に、私はTESTSERVER私の最後に、次の作品を使用してaspnet/WebSocketsテスト

+1

:1だけPathプロパティを指定する必要があります。多くの場合、あなたのニーズに合ったテストを見つけるでしょう。 – Nkosi

0

から解決策を見出し、

var builder = WebHost.CreateDefaultBuilder() 
       .UseStartup<Startup>() 
       .UseEnvironment("Development"); 

var server = new TestServer(builder); 
var wsClient = server.CreateWebSocketClient(); 

var wsUri = new UriBuilder(server.BaseAddress) 
{ 
    Scheme = "ws" 
}.Uri; 

await wsClient.ConnectAsync(wsUri, CancellationToken.None); 

しかし

は、元の質問以来パスを使用されています。念のために、それは他の誰かを助けるかもしれない、ここのコードです私は通常、彼らはテストし、あなたが行ったように、例としてそれらを使用する方法を確認するために最初のレポをチェックする傾向がある

var wsUri = new UriBuilder(server.BaseAddress) 
{ 
    Scheme = "ws", 

    Path = "local" 
}.Uri;