【问题标题】:Using web sockets in UWP background tasks在 UWP 后台任务中使用 Web 套接字
【发布时间】:2018-11-24 09:12:55
【问题描述】:

我正在尝试为 UWP 应用创建后台任务。该任务应该由来自网络套接字连接的数据包触发。

我已经测试了网络套接字,它按预期工作。

要使后台任务正常工作,根据 Microsoft 后台网络教程 (Network communications in the background),必须实例化 ControlChannelTrigger 并调用 channel.UsingTransport(socket) 方法。然后应该调用socket.ConnectAsync(...)

但是,当在channel.UsingTransport(socket) 之后调用socket.ConnectAsync(...) 时,socket.ConnectAsync(...) 方法会引发异常并显示以下消息。

HRESULT 异常:0x80072F75

在没有channel.UsingTransport(socket) 的情况下调用时,连接建立没有问题。

为了在后台任务中使用套接字,我必须在调用channel.UsingTransport(socket)后建立连接。

谁能解释为什么会发生这个错误?

【问题讨论】:

  • 此应用的目标平台是什么? ControlChannelTrigger 类不适用于 Windows 手机。
  • 它是桌面 x64。我知道电话限制。此应用不适用于手机。
  • 最后一个明显的问题,你打电话给BackgroundExecutionManager.RequestAccessAsync()link了吗?我知道这不需要从 UI 线程调用,但是从您发布的代码中,没有办法知道这一点。
  • 是的,我做到了。我有两种设置后台任务的方法。每个人在注册任务之前都调用了BackgroundExecutionManager.RequestAccessAsync()。我刚刚通过删除第二个方法检查了错误是否是由于对该方法的两次调用,但发生了相同的异常。

标签: c# sockets websocket uwp background


【解决方案1】:

请不要在同一台设备上安装 IIS 服务器并使用 localhost 连接服务器。请参阅network isolation 主题。使用官方WebSocket sample的服务器时,可以尝试将服务器文件夹及其子文件夹复制到另一台电脑上运行服务器脚本,然后就可以连接到服务器的IP地址如:

服务器 uri:ws://xxx.xx.xx.xx/WebSocketSample/echowebsocket.ashx

此外,请尝试测试ControlChannelTrigger StreamWebSocket 示例。

另见示例中的注释部分:

当与提供的脚本一起使用时,此 Windows 应用商店应用示例通过环回与同一台计算机上的另一个进程(IIS 服务器,它是一个桌面应用)进行通信,仅用于演示目的。不允许通过环回与代表 Windows 应用商店应用的另一个进程通信的 Windows 应用商店应用,并且此类应用不会通过应用商店验证。如需更多信息,请参阅How to configure network isolation capabilities

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-11
    • 1970-01-01
    相关资源
    最近更新 更多