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

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

  1. 需要访问SQL Server的桌面客户端的最佳实践是什么?
  2. 从应用程序连接到数据库与使用Web服务有什么好处?
  3. 哪一个提供更好的安全性?
  4. 什么类型的范围将要求一个与另一个(企业内部网与Web应用程序等)
  5. 在平台上选择时是否还有其他必要的考虑因素?

需要访问SQL Server的桌面客户端的最佳实践是什么?

如果您使用的是本地SQL Server,则直接访问数据库。 如果客户端必须在另一个系统上使用SQL数据库,则首选使用Web服务以获得额外的保护,并且具有应该能够处理多个用户的业务层的附加优势。

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

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

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

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

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

Web服务更适用于客户端 – 服务器应用程序,用户不应直接访问数据库。 否则,直接数据库连接只会提高性能。 在创建Web服务时,首先要编写一个通用(类)库,它将为Web服务提供function。 围绕此(业务)库创建Web服务,将重要方法暴露给外部世界。 任何网站都可以直接调用此库而无需使用Web服务,但您可以选择让网站代码通过Web服务访问数据。 即使您只使用本地数据库创建一个桌面应用程序,编写一个带有逻辑的业务库来访问数据库也是一件非常好的事情。 您的客户可以直接或通过Web服务调用此业务库,具体取决于您的需求。

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

主要是您愿意用来设置的硬件数量。 如果您能够设置数据库服务器,为服务设置单独的Web服务,为您的网站设置第三个服务,并且有十几个客户端系统,那么您可以选择最分层的版本,其中包括客户端和网站调用调用数据库的Web服务。 但如果一切都需要在一个系统上运行,那么只需坚持使用应用程序和业务层/库。

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

一般的经验法则如下:

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

我会保持简单并尽量减少层数。 层会降低性能,引入复杂性,并且需要在更多位置进行更改。

因此,如果应用程序和Sql Server之间的netwerk连接是打开的(通常是tcp端口1433),我将使用Sql连接。

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

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

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

鉴于上下文,客户端访问数据库可能存在很大的安全问题。 它要么允许用户访问数据库,要么创建服务帐户。 让用户直接访问数据库会带来风险。 这两种方法都打开了大门,利用桌面dll连接到应用程序上下文之外的数据库(多次我看到有一个所有function操作都使用的公共数据访问类的情况。当然,这些组件初始化所有连接信息基于reflection的访问使得很容易获得受保护的或私有的方法,除非你声明安全权限。

Web服务公开不公开任何基于sql的操作的function操作。 这不仅更安全,而且还可以将您的客户从数据存储实施中抽象出来。

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