我使用.net core 2服务器设置客户端服务器应用程序,并且出于测试目的使用普通的javascript客户端。 从客户端向服务器发送消息仅在从服务器向客户端发送消息中起作用。 我的事件监听器没有启动,也没有在浏览器的网络检查器(到目前为止已测试过Chrome或Firefox)中看到任何流量。
我正在使用iis-express进行测试,并通过.net run从控制台运行它。
所以我的类中处理服务器端websocket管理的重要部分看起来像这样:
public async Task InitWebsocketConnection(HttpContext context)
{
WebSocket ws = await context.WebSockets.AcceptWebSocketAsync();
_wsCon = new WebsocketConnection(ws);
await SendToWebsocket("Hello Client");
_websocketStorrage.AddWebsocket(_wsCon);
WebSocketCloseStatus? closestatus = await ReciveMessagesAsync();
if (closestatus != null)
await ws.CloseAsync(closestatus.Value, "End of Connection",
CancellationToken.None);
_websocketStorrage.RemoveWebsocket(_wsCon.Id);
}
private async Task SendToWebsocket(string payload)
{
byte[] bytes = Encoding.UTF8.GetBytes(payload);
await _wsCon.Websocket.SendAsync(new ArraySegment<byte>(bytes, 0,
bytes.Count()), WebSocketMessageType.Text, false, CancellationToken.None);
}
在这样的Startup.cs类的Configure方法中调用此代码:
app.UseWebSockets();
app.Use(async (http, next) =>
{
if (http.WebSockets.IsWebSocketRequest)
{
await wsService.InitWebsocketConnection(http);
}
else
{
await next();
}
});
我的javascript客户端如下所示:
webSocket = new WebSocket("ws://localhost:50441/websocket");
console.log(webSocket);
webSocket.onopen = function (){
document.getElementById("ready").innerHTML = "READY";
}
webSocket.onmessage = function (event) {
console.log(event.data);
console.log("incoming");
}
webSocket.onclose = function (event) {
console.log(event);
}
我可以与服务器建立Websocket连接,并且可以正确接收发送到服务器的任何消息。 但是我希望在控制台上看到一个“ Hello Client”或至少一个“ incoming”,但是什么也没有发生,根本没有输出