【问题标题】:Do Web Services create overhead if not required?如果不需要,Web 服务是否会产生开销?
【发布时间】:2015-09-22 17:25:16
【问题描述】:

我们正在开发一个 mvc Web 应用程序,并且 UI 将是响应式的,因此对于将使用服务的本机应用程序所需的 Web 服务,未来不会有任何需求。但是,如果我们将来想在客户端使用 Angular js,那么它是必需的。

现在的问题是:

如果我们使用项目库(服务库而不是 Web api)而不是使用在 Web api 中创建的 REST 服务,性能会更好吗?或者如果我们使用休息服务不会有太大的区别?

如果不需要其他服务,我相信包括服务项目库的引用将是最佳选择。当来自客户端的请求发送到服务器时,它不需要另一个 http 请求来调用休息服务。

【问题讨论】:

  • 许多好的问题会根据专家的经验产生一定程度的意见,但这个问题的答案往往几乎完全基于意见,而不是事实、参考资料或特定专业知识。
  • 正确,你遇到过这种情况吗?或者你有正确答案的事实/参考吗?
  • 您的问题是什么?您正在构建将直接使用 dll 的本机应用程序,并且您想知道是否仍需要这些 api?
  • 我的建议是参考服务项目库。当然,它会比创建 API 更快,添加一个安全层(例如 OAuth2.0)以仅允许允许的用户使用您的 Web 服务,仅举几例您必须做的额外任务。好消息是,如果您需要在几个月内创建一个 API,您只需创建一个 Web API 项目并将其引用到您的服务项目库(请记住,您的所有业务逻辑都必须封装在您的服务中)项目库,而不是你的控制器)。
  • 感谢 wilsotobianco,您是正确的,但是正如 Epodax 所提到的,它完全基于意见。你有相同的事实/参考吗?

标签: c# rest model-view-controller architecture project


【解决方案1】:

两全其美将包括服务项目库的引用,但是以一种您可以拥有一个非常薄的层 - ApiController - 来处理 WebService 安全性的方式设计它们,如果any,然后调用逻辑。

如果你做得对,控制器除了调用你的服务类之外应该几乎没有代码。

其他优势:您可以实现几个将您的服务公开为 REST 服务的控制器,以证明您掌握了它的要点并且您的架构有效,然后在以后公开所有其他服务例如,当您切换到 AngularJS 时,您可以根据需要将它们作为 RESTful API。

【讨论】:

  • 如果您针对服务类构建代码,这可能会很麻烦。可能存在序列化问题(循环引用、不可序列化的类),直到您尝试从 Web 服务提供它们时才会注意到。
  • 我不确定在这种情况下循环引用是如何发生的,但你有一个观点,即明智地选择要在这些服务返回的对象中公开的类型,否则,需要更多代码将需要确保它们可以被序列化。
  • 循环引用很容易创建,例如通过返回一个带有List<OrderLine> 属性的Order,其中OrderLine 有一个对Order 的引用。这将适用于程序集引用,但不能通过没有更改的序列化。
  • 哦,好点。那么在设计返回的对象时应该格外小心。
【解决方案2】:

Web 服务的开销与调用次数成正比。通过调用无操作服务 100000 次来测量它。每个 CPU 内核每秒可能会收到 1000-5000 次调用。

此衡量标准不包括网络延迟。

根据您的应用程序有多健谈,性能成本可能接近于零或毁灭性的。

添加 Web 服务层时,最大的问题通常是生产力成本。这很重要。您不能再在图层之间共享对象并依赖对象标识。一切都被复制。例如,在客户端上没有使用 ORM。

Web 服务不是随便添加的。也许您可以将您的代码构建为一个库,以后也可以将其放入 Web 服务中。但由于状态无法共享这一相当基本的问题,这很难做到。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-01
    • 2022-08-02
    • 2011-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-18
    相关资源
    最近更新 更多