我已经按照 this 在 .net 核心中构建了一个 WebSocket Web 应用程序和 this或 this教程。现在我正在尝试使用 Microsoft.AspNetCore.TestHost 对此编写一些集成测试
我创建 WebSocket 的方式
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 客户端的创建是在下面的代码中完成的
ClientWebSocket testAppClient = new ClientWebSocket();
await
testAppClient
.ConnectAsync(
new Uri("ws://loclahost:52015/local"),
CancellationToken.None);
local
是websocket服务器上的路径名
Startup.cs
app.MapWebSocketManager(
"/local",
serviceProvider.GetService<LocalServiceSocketHandler>());
无论如何,连接会产生以下错误
System.Net.WebSockets.WebSocketException : Unable to connect to the remote server
我的问题是如何让 ClientWebSocket
连接到 TestHost.WebSocketClient
?
最佳答案
使用 TestServer 以下是我的工作,以防万一它可以帮助其他人,这里是代码:
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);
但由于最初的问题是使用路径 /local
,因此只需要指定 Path
属性:
var wsUri = new UriBuilder(server.BaseAddress)
{
Scheme = "ws",
Path = "local"
}.Uri;
关于c# - 使用 ClientWebSocket .net 核心测试 TestHost.WebSocketClient,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47349739/