是否有方法格式化StreamSocket的HostName以包含用户令牌?当我尝试将URI和用户令牌一起使用时,会出现"参数不正确"的异常。我已经成功地使用了MessageWebSocket,但我需要一个StreamSocket,因为它能够(轻松地)在Windows 10 UWP的后台运行。这是我的密码。如有任何帮助,我们将不胜感激。
public static async void ConnectToStreamSocket()
{
StreamSocket socket = new StreamSocket();
string hostUri = "//example.myexample.com/websocket/dfkjlkdfskldklfdkddkfdkffjf";
HostName host = new HostName(hostUri);
string proto = "wss";
await socket.ConnectAsync(host, proto);
}
当我尝试将URI和用户令牌一起使用时,会出现"参数不正确"异常。
HostName构造函数的参数不是URI,而是包含hostname
或IP地址的字符串。根据hostName
参数的描述,它可以包含以下内容之一:
- 可以由域名系统(DNS)或其他命名空间提供程序解析的主机名
- 与本地计算机上以下文件中的字符串匹配的主机名:%WINDIR%\system32\drivers\etc\hosts
- 包含主机的IPv4或IPv6网络地址的字符串
对于"//example.myexample.com/websocket/dfkjlkdfskldklfdkddkfdkffjf"
,这是一个不满足上述要求的URI,因此HostName
类无法识别它。可以识别类似example.myexample.com
的值。
为什么您可以成功地使用MessageWebSocket
类,这是因为MessageWebSocket.ConnectAsync
方法需要您提供的URI参数。
但我需要一个StreamSocket,因为它能够(轻松)在Windows 10 UWP的后台运行。
WebSockets
提供了一种使用HTTP(S)在客户端和服务器之间通过web进行快速、安全双向通信的机制Socket
可用于与其他设备通信。它们不是相同的东西,我们不能简单地将WebSockets
转移到StreamSocket
。关于uwp中WebSockets
和StreamSockets
的更多详细信息,请参考官方文件Sockets
和WebSockets
。
但是WebSockets
可以在后台使用,您可能不需要StreamSocket
。如果您在后台使用WebSockets,则必须使用ControlChannelTrigger。有关如何将WebSockets与ControlChannelTrigger一起使用的详细信息,请参阅ControlChannelTrigger与WebSockets。