Web服务与共享库

时间:2009-08-21 15:57:38

标签: web-services

从我发现的内容中,有几次询问过这个问题:

When should a web service not be used? Web Service or DLL?

答案有所帮助,但他们都指出了一个特定的场景。我想对此有一个更普遍的想法。

何时应该通过共享库(DLL)考虑Web服务,反之亦然?

5 个答案:

答案 0 :(得分:12)

我对此的想法:

Web服务专为机器互操作而设计,可以覆盖受众 通过使用HTTP作为传输方式很容易。

一个强项是,通过发布服务,你也开始使用 为有潜力的观众提供服务(通过网络或至少在整个网络上) 整个公司)和/或大部分在您的控制/影响/沟通渠道之外 而你不介意或这是你想要的。作为客户,服务的使用更加容易 只需要有互联网连接并使用该服务。不像图书馆那样 可能不那么容易做(但可以做到)。该服务的使用基本上是开放的。您可以将它提供给任何可以使用它的人,但是他们觉得可以使用它。

但是,网络服务通常较慢,并且依赖于互联网连接 通常比代码库更难测试 它可能更难维护。其中很大一部分取决于您的维护和编码实践。

如果需要上述几个功能或至少其中一个功能,我会考虑使用Web服务 被认为是最重要的,缺点是可接受的或必要的邪恶。

共享图书馆怎么样?

如果您更多地“控制”您的环境或希望成为什么样的人,该怎么办?您知道谁将使用该代码 (界面维护不是问题),你不必担心互操作。你处于这样的境地 你可以轻松实现分享而无需大量的工作/箍跳。

我想到何时使用的例子:

您的控件中有许多应用程序都托管在同一台服务器或两台将使用该库的应用程序上。

不是很好的例子,你有很多应用程序,但都托管在十几个服务器上。 Web服务可能是更好的选择。

您不确定您的代码是谁或如何使用,但知道它对许多人来说都很有价值。网络服务。

您正在编写仅由一组有限的应用程序使用的东西,也许是一些辅助函数。图书馆。

你正在写一些高度专业化的东西,不适合许多人消费。例如您的业务线的API 没有人会使用的应用程序。库。

如果所有条件都相同,那么从共享库开始并将其转换为Web服务会更容易,反之亦然。反之亦然。

还有更多,但这些是我的一些想法...

答案 1 :(得分:7)

图书馆优势:

服务优势:

  • 每个人都可以立即透明地进行升级(除非提供版本化的API)
  • 消费者无法反编译代码
  • 可以单独扩展服务硬件
  • 技术不可知论者。使用共享库,消费者必须使用兼容的技术。
  • 更安全。 UI层可以调用位于防火墙后面的服务,而不是直接访问数据库。

答案 2 :(得分:4)

基于多个来源......

公共共享库

  1. 应提供一组执行常见任务的众所周知的操作(例如,字符串解析,数值操作,构建器)
  2. 应封装常见的可重用代码
  3. 对其他库的依赖性最小
  4. 提供稳定的界面
  5. 服务

    1. 应提供可重用的应用程序组件
    2. 提供通用商业服务(例如,回报率计算,绩效报告或交易历史记录服务)
    3. 可用于连接不同系统的现有软件或在应用程序之间交换数据

答案 3 :(得分:0)

理想情况下,如果我想同时兼顾这两个优点,那么我将需要一个可移植的库,该库具有不可知的接口粘合,可自动更新,具有混淆(难于反编译)或安全的内部环境。

可能同时使用网络服务和库使之可行。

答案 4 :(得分:0)

这里有5个选项以及使用它们的原因。

  1. 服务

    • 具有永久状态
    • 您需要经常发布更新
    • 解决了主要业务问题并拥有与之相关的数据
    • 需要安全性:用户看不到您的代码,用户无法访问您的存储空间
    • 需要像REST这样不可知的接口(您可以自动为客户端语言自动生成浅REST客户端)
    • 需要单独扩展
  2. 图书馆

    • 您只需要可重用代码的集合
    • 需要在客户端运行
    • 不能容忍任何停机时间
    • 甚至不能忍受几毫秒的延迟
    • 可能可行的最简单解决方案
    • 需要将代码运送到数据(高通量或map-reduce)
  3. 首先提供库。然后在需要时提供服务。

    • 敏捷方法,从扩展到扩展都是最简单的解决方案
    • 需求可能会演变并变得更像“服务”案例
  4. 启动本地服务的库。

    • 主机上的许多应用程序需要与其连接并向其中发送一些数据
  5. 都不是

    • 即使是图书馆案子,你也无法认真辩护
    • 商业价值值得怀疑