【问题标题】:Make call from Web API to Client [closed]从 Web API 调用客户端 [关闭]
【发布时间】:2021-04-25 08:33:55
【问题描述】:

我在服务器上托管了一个 .NET Core Web API,并且有一台远程客户端计算机(不在同一个网络中,与服务器或网络无关)

在正常情况下,客户端会调用 Web API 和 GET/POST 数据,但我的要求是 Web API 调用客户端并从客户端获取某些信息。比如说,Web API 想要获取有关客户端机器当前进程详细信息的详细信息。

假设:

-Web API 已经知道有关客户端的以下详细信息:

IP 地址、UUID、Mac 地址、机器名称、工作组

-可以有超过 100,000 台客户端机器(无限制)

-Web API 需要在单击按钮时立即了解客户端的详细信息

有没有办法实现这个?

【问题讨论】:

  • 看看 WebSockets、SignalR、Firebase、Socket.io 和这些的替代品。
  • 你在说什么客户?手机?件?服务器?
  • @PrateekShrivastava 不,这不是一个有效的方法,除非你建议同时有 100k 个打开的 websockets 连接,以及相关的大量成本。
  • 这太宽泛了,您应该聘请知识渊博的人或解决这些要求。服务器无法在客户端上神奇地启动连接,客户端需要公开某种服务
  • @Vincent 可以是 Windows 服务器或 PC。

标签: c# asp.net windows asp.net-core-webapi


【解决方案1】:

您可以使用 SignalR,它将在客户端和服务器之间打开一个连接。 一旦您需要获取数据,请使用特定的操作名称向客户端发送 signalR 请求(ping),客户端将采取行动并调用给定的端点(API),为您提供所需的信息。 后端的 SignalR 实现非常简单,它取决于您的客户端技术来选择任何附加库。

【讨论】:

    【解决方案2】:

    假设客户端自己无法托管某种网络服务,您可以使用套接字来完成此操作。

    如果你已经在 IIS 上托管了一个 web api,你也许可以实现 websocket 协议。需要在服务器上的服务器角色中检查一个单独的 IIS 功能,允许您将传入连接升级为 websocket 连接。

    让客户端在启动时发起连接,并将套接字的状态保存在服务器中。

    这可以实现从服务器到客户端以及从客户端到服务器的双向通信。

    更多信息可以在这里找到:

    https://docs.microsoft.com/en-us/aspnet/core/fundamentals/websockets?view=aspnetcore-5.0

    https://www.rfc-editor.org/rfc/rfc6455

    【讨论】:

    • 这假设一直有 100k 打开的 Web 套接字连接是有效的,因为服务器不能自己神奇地打开连接。这种方法是无效的,但问题是这个问题太宽泛了,OP 应该雇佣更了解的人
    • 是的,这假设有 10 万个打开的套接字连接,但除非客户端可以托管服务器,否则这是 - 除了一些长轮询策略 - 满足要求的唯一解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-10
    • 2014-04-04
    • 2011-02-10
    • 2013-07-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多