问题描述
以下代码适用于UWP,但不适用于WASM。我确实在WASM头上安装了Uno.Wasm.WebSockets软件包。
_webSocketConnectionCTS = new CancellationTokenSource();
using (_webSocket = new ClientWebSocket())
{
try
{
await _webSocket.ConnectAsync(new Uri(address),_webSocketConnectionCTS.Token);
await Receive(_webSocket,_webSocketConnectionCTS.Token);
}
catch (Exception ex)
{
Console.WriteLine("Failed to connect to WebSocket server: " + ex.Message);
}
}
在连接上抛出异常:“值不能为空”,但两个参数都不为空。
解决方法
在当前版本的Uno中,ClientWebSocket
类不可用,因为基础类未为其提供实现。您可以改用Uno.Wasm.WebSockets
程序包,该程序包使用与ClientWebSocket
相同的API。
下面是the documentation的示例:
var ws = new Uno.Wasm.WebSockets.WasmWebSocket();
// Connect to a simple echo WebSocket server
await ws.ConnectAsync(new Uri("wss://echo.websocket.org"),CancellationToken.None);
Console.WriteLine("Program: Connected!");
// Send some data
var data = new ArraySegment<byte>(Encoding.UTF8.GetBytes("Hello websocket !"));
await ws.SendAsync(data,System.Net.WebSockets.WebSocketMessageType.Binary,false,CancellationToken.None);
Console.WriteLine("Program: Sent!");
// Read the echo back
var buffer = new byte[1024];
var received = await ws.ReceiveAsync(new ArraySegment<byte>(buffer),CancellationToken.None);
var receivedString = Encoding.UTF8.GetString(buffer,received.Count);
Console.WriteLine($"Received {received.Count} bytes: {receivedString}");