代码之家  ›  专栏  ›  技术社区  ›  Dan McClain

最佳实践:直接SQL访问与Web服务

  •  18
  • Dan McClain  · 技术社区  · 15 年前

    对于同时具有Web和桌面客户端版本的应用程序:

    1. 对于需要访问SQL Server的桌面客户端,最佳做法是什么?
    2. 从应用程序连接到数据库与使用Web服务相比有什么好处?
    3. 哪一个提供了更好的安全性?
    4. 一个与另一个需要什么类型的范围(企业内部网与Web应用程序等)
    5. 在平台上选择时是否有其他必要考虑的因素?
    5 回复  |  直到 15 年前
        1
  •  15
  •   Wim ten Brink    15 年前

    对于需要访问SQL Server的桌面客户端,最佳做法是什么?

    如果您使用的是本地SQL Server,那么直接访问数据库。如果客户机必须在另一个系统上使用SQL数据库,则最好使用Web服务来提供额外的保护,并且具有能够处理多个用户的业务层的额外优势。

    从应用程序连接到数据库与使用Web服务相比有什么好处?

    通过Web服务连接总是会慢一点,对数据库的修改将更难添加到整个系统中。(基本上,这意味着您需要创建较新版本的Web服务,同时维护较旧的Web服务以实现向后兼容性。)

    哪一个提供了更好的安全性?

    Web服务的使用往往更安全,尽管安全性通常是 问题比软件问题。但是,由于用户和数据库之间的Web服务,与数据库的连接更加安全,因为用户无法直接访问它。(除了您通过Web服务提供的功能)当客户端和数据库在同一个系统上时,这一点是没有意义的,因为这样用户就可以获得完全访问权。

    一个与另一个需要什么类型的范围(企业内部网与Web应用程序等)

    Web服务更适合客户机-服务器应用程序,用户不应该直接访问数据库。否则,直接的数据库连接只会提高性能。 创建Web服务时,首先编写通用(类)库,该库将为Web服务提供功能。围绕这个(业务)库创建一个Web服务,向外界公开重要的方法。任何网站都可以在不使用Web服务的情况下直接调用此库,尽管您始终可以选择甚至让网站代码通过Web服务访问数据。 即使只是用本地数据库创建一个桌面应用程序,编写一个具有访问数据库逻辑的业务库也是一件很好的事情。根据您的需要,您的客户机可以直接或通过Web服务调用此业务库。

    在平台上选择时是否有其他必要考虑的因素?

    大部分只是你愿意用来设置的硬件数量。如果你能负担得起建立一个数据库服务器,一个单独的服务Web服务,第三个为你的网站,有十几个左右的客户机系统,那么你可以选择最分层的版本,在那里客户机和网站都会调用调用调用数据库的Web服务。但是,如果所有东西都需要在一个系统上运行,那么只需坚持应用程序和业务层/库。

    但是,添加层会从单个用户的角度降低性能。但是,使用多个层可以提高整体性能,因为资源在多个用户中得到更好的分配。

        2
  •  16
  •   Darin Dimitrov    15 年前

    一般经验法则如下:

    1. 编写将与数据库对话的独立数据访问程序集。
    2. 如果您正在寻找不同平台/客户机之间的互操作性,那么将此程序集公开为SOAP Web服务。
    3. 如果要寻找性能,请直接在客户端.NET应用程序中使用程序集。
        3
  •  7
  •   Andomar    15 年前

    我会保持简单,尽量减少层数。分层会降低性能,增加复杂性,并要求在更多位置进行更改。

    因此,如果应用程序和SQL Server之间的netwerk连接是开放的(通常是TCP端口1433),那么我将使用SQL连接。

        4
  •  3
  •   Mathias F    15 年前

    如果您可以从桌面访问数据库,那么您应该这样做。

    你有多种客户。这意味着应用程序应该有多个层。 这并不意味着你需要多个层次。

    如果您的层必须通过防火墙传输数据,或者您具有多种技术,则可能需要多个层。

        5
  •  3
  •   Marty Nelson    14 年前

    考虑到上下文,客户机访问数据库可能存在一个很大的安全问题。它需要给用户访问数据库的权限,或者创建一个服务帐户。给用户直接访问数据库带来了风险。这两种方法都打开了利用桌面DLL连接到应用程序上下文之外的数据库的大门(我见过很多次这样的情况,即所有功能操作都使用一个公共的数据访问类)。当然,这个组件初始化所有连接信息。基于反射的访问使访问受保护或私有方法变得容易,除非您声明安全特权)。

    Web服务公开不公开任何基于SQL的操作的功能操作。这不仅更安全,还将客户机从数据存储实现中抽象出来。

    同样,这取决于你的背景。但在企业/ISV领域,这通常是一个很大的禁忌。